Submission #14192

#TimeUsernameProblemLanguageResultExecution timeMemory
14192paulsohn백신 (KOI13_vaccine)C++98
24 / 24
41 ms5192 KiB
#include<cstdio> #include<vector> #include<algorithm> using namespace std; int N,K; vector<int> code[100], T[2000], cpy; void mkt(int* p, int o){ int i=1,j=0; T[o].push_back(-1); while(i<K){ if(p[i]==p[j]){ T[o].push_back(j); ++i; ++j; } else if(j>0) j=T[o][j]; else{ T[o].push_back(0); ++i; } } } bool KMP(int r, int m){ int i=0,j=0,s=0; while(i+j<code[r].size()){ if(code[r][i+j]==code[0][m+j]){ ++j; ++s; } else if(j){ i+=j-T[m<<1][j]; j=T[m<<1][j]; } else ++i; if(j==K) return true; } i=0,j=0; while(i+j<code[r].size()){ if(code[r][i+j]==code[0][m+K-1-j]){ ++j; } else if(j){ i+=j-T[(m<<1)+1][j]; j=T[(m<<1)+1][j]; } else ++i; if(j==K) return true; } return false; } int main(){ int i,j,m,w,*p; scanf("%d%d",&N,&K); for(i=0;i<N;++i){ scanf("%d",&m); for(j=0;j<m;++j){ scanf("%d",&w); code[i].push_back(w); } } for(j=0;j<=code[0].size()-K;++j){ cpy=code[0]; p=&(cpy[j]); mkt(p,j<<1); reverse(p,p+K); mkt(p,(j<<1)+1); } for(j=0;j<=code[0].size()-K;++j){ for(i=1;i<N;++i){ if(!KMP(i,j)) break; } if(i==N){ printf("YES"); return 0; } } printf("NO"); return 0; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...