結果
問題 | No.2761 Substitute and Search |
ユーザー | tails |
提出日時 | 2024-05-22 12:43:55 |
言語 | C90 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 842 ms / 4,000 ms |
コード長 | 1,680 bytes |
コンパイル時間 | 506 ms |
コンパイル使用メモリ | 27,136 KB |
実行使用メモリ | 314,240 KB |
最終ジャッジ日時 | 2024-05-22 12:44:03 |
合計ジャッジ時間 | 7,238 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,812 KB |
testcase_01 | AC | 1 ms
6,944 KB |
testcase_02 | AC | 1 ms
6,940 KB |
testcase_03 | AC | 1 ms
6,944 KB |
testcase_04 | AC | 384 ms
27,648 KB |
testcase_05 | AC | 90 ms
16,256 KB |
testcase_06 | AC | 493 ms
308,608 KB |
testcase_07 | AC | 842 ms
314,112 KB |
testcase_08 | AC | 160 ms
23,808 KB |
testcase_09 | AC | 311 ms
29,440 KB |
testcase_10 | AC | 380 ms
308,608 KB |
testcase_11 | AC | 342 ms
314,240 KB |
testcase_12 | AC | 403 ms
311,424 KB |
testcase_13 | AC | 383 ms
311,296 KB |
testcase_14 | AC | 136 ms
26,624 KB |
testcase_15 | AC | 345 ms
311,424 KB |
コンパイルメッセージ
main.c: In function ‘maze’: main.c:23:6: warning: type of ‘l’ defaults to ‘int’ [-Wimplicit-int] 23 | void maze(l,k,ci,di){ | ^~~~ main.c:23:6: warning: type of ‘k’ defaults to ‘int’ [-Wimplicit-int] main.c:23:6: warning: type of ‘ci’ defaults to ‘int’ [-Wimplicit-int] main.c:23:6: warning: type of ‘di’ defaults to ‘int’ [-Wimplicit-int] main.c: In function ‘main’: main.c:96:9: warning: implicit declaration of function ‘write’ [-Wimplicit-function-declaration] 96 | write(1,wbuf,wp-wbuf); | ^~~~~ main.c:97:9: warning: implicit declaration of function ‘_exit’ [-Wimplicit-function-declaration] 97 | _exit(0); | ^~~~~ main.c:97:9: warning: incompatible implicit declaration of built-in function ‘_exit’ [-Wbuiltin-declaration-mismatch]
ソースコード
#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define rd_init() char*rp=({char*mmap();mmap(0l,1l<<25,1,2,0,0ll);}) #define rd() ({int _v=0,_c;while(_c=*rp++-48,_c>=0)_v=_v*10+_c;_v;}) #define wt(v) {unsigned _z=v,_n=0;long _d=0;while(++_n,_d=_d<<8|0x30|_z%10,_z/=10);*(long*)wp=_d;wp+=_n;} #define rep(v,e) for(typeof(e) v=0;v<e;++v) char wbuf[1<<25]; struct E { short cnt; short cid; }; struct N { struct E e[26]; }; struct N tree[3001][1000]; int tn[3001]; void maze(l,k,ci,di){ if(k<l){ rep(a,26){ if(tree[k][ci].e[a].cnt){ if(tree[k][di].e[a].cnt){ tree[k][di].e[a].cnt+=tree[k][ci].e[a].cnt; maze(l,k+1,tree[k][ci].e[a].cid,tree[k][di].e[a].cid); }else{ tree[k][di].e[a]=tree[k][ci].e[a]; } } } } } int main(){ rd_init(); int n=rd(); int l=rd(); int q=rd(); tn[0]=1; rep(i,n){ int nid=0; rep(j,l){ int c=*rp++-'a'; struct E*ep=&tree[j][nid].e[c]; if(ep->cnt==0){ ep->cid=tn[j+1]++; } ep->cnt+=1; nid=ep->cid; } ++rp; } char*wp=wbuf; while(q--){ int t=*rp; rp+=2; if(t&1){ int k=rd(); int c=*rp-'a'; rp+=2; int d=*rp-'a'; rp+=2; rep(i,tn[k-1]){ struct N*np=&tree[k-1][i]; if(np->e[c].cnt){ if(np->e[d].cnt){ np->e[d].cnt+=np->e[c].cnt; maze(l,k,np->e[c].cid,np->e[d].cid); }else{ np->e[d]=np->e[c]; } np->e[c].cnt=0; } } }else{ int z=0; int nid=0; int k=0; for(int c;c=*rp++-'a',c>=0;){ z=tree[k][nid].e[c].cnt; if(!z){ while(*rp++-'a'>=0); break; } nid=tree[k][nid].e[c].cid; ++k; } wt(z); *wp++='\n'; } } write(1,wbuf,wp-wbuf); _exit(0); }