QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#768994 | #9555. Strength | _LSA_ | TL | 0ms | 0kb | C++20 | 1.4kb | 2024-11-21 15:39:43 | 2024-11-21 15:39:44 |
answer
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pii pair<int,int>
#define fi first
#define se second
#define mk make_pair
using namespace std;
ll read(){
ll X = 0 ,r = 1;
char ch = getchar();
while(!isdigit(ch) && ch != '-') ch = getchar();
if(ch == '-') r = -1,ch = getchar();
while(isdigit(ch)) X = X*10+ch-'0',ch = getchar();
return X*r;
}
const int N = 1100;
const int mod = 998244353;
const int M = 1e7+10;
int n;
struct OPT{
int a,x,b,y;
int type;
}a[N];
int sum;
pii f[N][N];
pii dfs(int x,int tp){
if(f[x][tp] != mk(-1,-1)) return f[x][tp];
sum++;
if(sum > 1e7){
puts("-1");
exit(0);
}
if(tp == 0 && a[x].type == 1) return f[x][tp] = mk(1,0);
if(a[x].type == 0 && a[x].a == tp) return f[x][tp] = mk(1,a[x].x);
auto [cnt1,z1] = dfs(a[x].y,a[x].b);
if(!z1) return f[x][tp] = mk(cnt1+1,z1);
auto [cnt2,z2] = dfs(z1,tp);
return f[x][tp] = mk((cnt1+cnt2+1)%mod,z2);
}
int main(){
n = read();
for(int i=1;i<=n;i++){
char op; cin >> op;
if(op == 'H'){
a[i].type = 1;
a[i].b = read(); a[i].y = read();
}else{
a[i].a = read(); a[i].x = read();
a[i].b = read(); a[i].y = read();
}
}
memset(f,-1,sizeof(f));
cout << dfs(1,0).fi << "\n";
return 0;
}
详细
Test #1:
score: 0
Time Limit Exceeded
input:
5 0 2147483646 10 100 671232353 1232363 123001006660996 3122507962333010 100019990010301090 44519984489341188