QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#834053 | #2677. JOJO | hhy0613 | 100 ✓ | 19ms | 23288kb | C++14 | 1.5kb | 2024-12-27 10:35:15 | 2024-12-27 10:35:16 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N=100005,mod=998244353;
int ma[N],nxt[N],t=-1,num[N],pre[N];
map<pair<int,char>,int> mm[N];
long long ans[N];
char ch[N];
long long calc(int l,int r){
if(l>r) return 0;
return 1ll*(l+r)*(r-l+1)/2;
}
void DFS(int u,int x,char c,long long lst){
if(u!=0){
++t;
num[t]=x;
ch[t]=c;
pre[t]=(t==0?0:pre[t-1])+x;
ans[u]=lst;
if(t==0){
nxt[t]=-1;
ans[u]+=calc(0,x-1);
}else{
int q=nxt[t-1];
while(q!=-1 && (num[q+1]!=x || ch[q+1]!=c)) q=nxt[q];
if(num[q+1]==x && ch[q+1]==c) nxt[t]=q+1;
else{
if(ch[0]==c && num[0]<x) nxt[t]=0;
else nxt[t]=-1;
}
int now=0;
q=nxt[t-1];
while(now<x){
if(ch[q+1]==c && now<num[q+1]){
ans[u]+=calc((q==-1?0:pre[q])+now+1,(q==-1?0:pre[q])+min(num[q+1],x));
now=num[q+1];
}
if(q==-1) break;
q=nxt[q];
}
if(ch[0]==c && now<x) ans[u]+=1ll*num[0]*(x-now);
}
}else ans[u]=0;
for(auto P:mm[u]) DFS(P.second,P.first.first,P.first.second,ans[u]);
if(u!=0) --t;
}
int main(){
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int n;
cin >> n;
ma[0]=0;
for(int i=1;i<=n;++i){
int op,x;
cin >> op >> x;
if(op==1){
char c;
cin >> c;
if(mm[ma[i-1]].find(make_pair(x,c))==mm[ma[i-1]].end()) mm[ma[i-1]][make_pair(x,c)]=i;
ma[i]=mm[ma[i-1]][make_pair(x,c)];
}else ma[i]=ma[x];
}
DFS(0,0,'?',0);
for(int i=1;i<=n;++i) cout << ans[ma[i]]%mod << '\n';
return 0;
}
详细
Pretests
Final Tests
Test #1:
score: 10
Accepted
time: 0ms
memory: 8744kb
input:
300 1 281 t 1 196 p 1 96 g 1 196 w 2 1 1 281 g 1 14 n 1 14 x 1 173 y 1 96 z 1 96 u 1 96 h 2 6 1 281 t 2 7 1 196 p 2 16 1 96 g 1 196 w 2 6 1 281 x 1 14 n 1 14 x 1 173 y 1 96 z 1 96 u 1 96 h 1 16 j 1 281 t 1 196 p 1 96 g 1 196 w 1 281 g 2 14 1 14 n 1 14 x 1 173 y 1 96 z 1 96 u 1 96 h 1 281 t 1 196 p 1...
output:
39340 39340 39340 39340 39340 39340 39340 39340 39340 39340 39340 39340 39340 78961 39340 39340 39340 39340 39340 39340 39340 39340 39340 39340 39340 39340 39340 39340 78961 78961 78961 78961 78961 78961 78961 78961 78961 78961 78961 78961 118582 118582 118582 118582 118582 118582 118582 118582 1185...
result:
ok 300 numbers
Test #2:
score: 10
Accepted
time: 1ms
memory: 8300kb
input:
300 1 81 g 1 23 q 1 126 e 1 244 d 1 20 g 1 20 d 1 277 i 1 126 j 1 267 i 1 277 c 1 126 j 1 20 e 1 277 a 1 45 e 1 23 h 1 277 g 1 267 h 1 277 c 1 244 i 1 23 g 1 126 e 1 244 d 1 20 g 2 9 1 20 d 1 277 i 1 126 j 1 267 i 1 277 c 1 126 j 1 20 e 1 277 a 1 45 e 1 23 h 2 0 1 277 g 1 267 h 1 277 c 2 28 1 244 n ...
output:
3240 3240 3240 3240 3450 3450 3450 3450 3450 3450 3450 3450 3450 3450 3450 22647 22647 22647 22647 22923 22923 22923 23133 3450 3450 3450 3450 3450 3450 3450 3450 3450 3450 3450 0 38226 38226 38226 3450 3450 3726 3726 3726 3936 3936 3936 3450 3450 3450 3450 3450 3450 3450 3450 3450 22647 38226 38226...
result:
ok 300 numbers
Test #3:
score: 10
Accepted
time: 13ms
memory: 9772kb
input:
100000 1 1 c 1 1 v 1 1 u 1 1 f 1 1 g 1 1 l 1 1 c 1 1 a 1 1 j 1 1 c 1 1 y 1 1 l 1 1 n 1 1 u 1 1 o 1 1 u 2 0 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1...
output:
0 0 0 0 0 0 1 1 1 2 2 2 2 2 2 2 0 0 0 0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 210 231 253 276 300 325 351 378 406 435 465 496 528 561 595 630 666 703 741 780 820 861 903 946 990 1035 1081 1128 1176 1225 1275 1326 1378 1431 1485 1540 1596 1653 1711 1770 1830 1891 1953 2016 2080 ...
result:
ok 100000 numbers
Test #4:
score: 10
Accepted
time: 13ms
memory: 10872kb
input:
100000 1 1 q 1 1 w 1 1 e 2 1 1 1 s 1 1 n 1 1 i 1 1 l 1 1 d 1 1 x 1 1 f 1 1 s 1 1 p 1 1 y 1 1 d 1 1 b 1 1 v 1 1 i 1 1 q 1 1 t 1 1 i 1 1 r 1 1 e 1 1 r 1 1 e 1 1 t 2 18 1 1 p 1 1 f 1 1 p 1 1 t 1 1 c 1 1 q 1 1 v 1 1 z 1 1 v 1 1 x 1 1 u 1 1 x 1 1 h 1 1 b 1 1 v 1 1 c 1 1 a 1 1 x 1 1 c 1 1 a 1 1 g 1 1 a 1 ...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3 6 ...
result:
ok 100000 numbers
Test #5:
score: 10
Accepted
time: 12ms
memory: 10988kb
input:
100000 1 1 c 1 1 t 1 1 f 1 1 t 1 1 y 1 1 j 1 1 w 1 1 k 1 1 r 1 1 w 1 1 c 1 1 z 1 1 s 1 1 l 1 1 y 1 1 o 1 1 l 1 1 k 1 1 b 1 1 f 1 1 o 1 1 b 1 1 e 1 1 z 1 1 n 1 1 z 1 1 a 1 1 l 1 1 z 1 1 y 1 1 j 1 1 a 1 1 w 1 1 a 1 1 o 2 18 1 1 p 1 1 m 1 1 t 1 1 i 1 1 v 1 1 c 1 1 m 1 1 l 1 1 f 1 1 s 1 1 r 1 1 q 1 1 f ...
output:
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ...
result:
ok 100000 numbers
Test #6:
score: 10
Accepted
time: 19ms
memory: 23204kb
input:
100000 1 7564 e 1 1730 a 1 6135 b 1 8268 c 1 1730 d 1 2067 a 1 2067 b 1 2067 e 1 2067 a 1 7246 b 1 7246 d 1 7564 a 1 8268 d 1 6135 e 1 8268 a 1 1730 c 1 7246 d 1 1730 c 1 8268 e 1 6135 b 1 6135 a 1 8268 c 1 8268 e 1 7246 a 1 7564 d 1 8268 e 1 6135 d 1 2067 b 1 4008 a 1 7564 c 1 1962 a 1 6135 c 1 196...
output:
28603266 28603266 28603266 28603266 28603266 28603266 28603266 30740544 30740544 30740544 30740544 30740544 30740544 49562724 49562724 49562724 49562724 49562724 83498610 83498610 83498610 83498610 117434496 132017531 132017531 165953417 165953417 165953417 165953417 165953417 165953417 165953417 16...
result:
ok 100000 numbers
Test #7:
score: 10
Accepted
time: 15ms
memory: 23288kb
input:
100000 1 6850 f 1 2649 g 1 3685 i 1 3685 x 1 7360 y 1 2752 q 1 6850 g 1 2649 k 1 6850 g 1 2649 i 1 8846 e 1 2649 d 1 6850 n 1 3685 h 1 2752 n 1 1911 m 1 2752 q 1 2752 c 1 3685 m 1 3685 z 1 8846 y 1 2649 f 1 8846 w 1 604 a 1 1911 g 1 2752 r 1 604 h 1 7360 p 1 8846 o 1 2649 m 1 3685 q 1 3685 d 1 2649 ...
output:
23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 23457825 26967750 26967750 26967750 26967750 26967750 26967750 26967750 26967750 26967750 26967750 26967750 26967750 269...
result:
ok 100000 numbers
Test #8:
score: 10
Accepted
time: 15ms
memory: 23268kb
input:
100000 1 1420 w 1 7901 g 1 4938 t 1 7901 m 1 4092 k 1 3443 g 1 6147 o 1 1420 d 1 3443 p 1 2296 m 1 7901 n 1 3443 l 1 1420 b 1 3443 a 1 6147 j 1 6570 c 1 7901 n 1 4092 e 1 4092 h 1 1420 w 1 6570 t 1 4092 x 1 3443 w 1 6570 p 1 4938 i 1 6570 p 1 6570 m 1 2296 h 1 7901 e 1 2296 i 1 1420 s 1 1420 l 1 493...
output:
1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 1007490 2016400 2016400 2016400 5897970 5897970 5897970 5897970 5897970 5897970 5897970 5897970 5897970 5897970 5897970 5897970 5897970 5897970 5897970 5897...
result:
ok 100000 numbers
Test #9:
score: 10
Accepted
time: 13ms
memory: 10048kb
input:
100000 1 1145 f 1 6117 p 1 6262 h 1 6136 o 1 1145 d 1 1668 r 1 4942 e 1 1145 a 1 6262 j 1 6262 t 1 1440 b 1 764 n 1 1145 v 1 764 k 1 3592 i 1 764 p 1 4915 k 1 1440 q 1 1440 g 1 4942 f 1 8963 a 1 9641 t 1 9392 o 2 0 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1 1 a 1 1 b 1 1 c 1...
output:
654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 654940 5658590 5658590 5658590 5658590 0 0 0 0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 210 231 253 276 300 325 351 378 406 435 465 496 528 561 595 630 666...
result:
ok 100000 numbers
Test #10:
score: 10
Accepted
time: 13ms
memory: 9612kb
input:
100000 1 8697 e 1 3699 h 1 2576 x 1 1733 l 1 2576 p 1 3699 g 1 2330 j 1 8697 d 1 3699 e 1 8697 v 1 1733 b 1 2330 o 1 8697 e 1 2004 l 1 6142 t 1 4498 l 1 2843 c 1 2004 i 1 8697 w 1 1463 l 1 1733 a 1 7185 b 1 2576 r 1 6142 c 1 7185 w 1 6142 j 1 2330 i 1 7185 x 1 8697 t 1 2863 k 1 4498 c 1 1733 d 1 146...
output:
37814556 37814556 37814556 37814556 37814556 37814556 37814556 37814556 44657706 44657706 44657706 44657706 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 82480959 824...
result:
ok 100000 numbers