結果

問題 No.2761 Substitute and Search
ユーザー tailstails
提出日時 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]

ソースコード

diff #

#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);
}
0