# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
28710 | Fe (#68) | Play Onwards (FXCUP2_onward) | C++98 | 9 ms | 1492 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 205
int n,k,net[N][N],b[N][N],drg[N],chk[N],m[N],f[N],cnt,p,q;
char s[N][N];
int kmp(int x,int y,int ss,int e){
int i,j;
i=j=0;
while(i<m[y]){
while(j+1 && s[y][i]-s[x][j+ss]) j=f[j];
i++;j++;
if(j==k) return 1;
}
return 0;
}
void make_f(int x,int ss,int e){
int i,j;
i=0;j=-1;
f[i]=j;
while(i<k){
while(j+1 && s[x][i+ss]-s[x][j+ss]) j=f[j];
i++;j++;
f[i]=j;
}
}
int is_ok(int x,int y){
int ss,e,i,j;
if(m[x]<k || m[y]<k) return 0;
for(ss=0;ss<m[x]-k+1;ss++){
e=ss+k-1;
make_f(x,ss,e);
if(kmp(x,y,ss,e)) return 1;
}
return 0;
}
void ff(int x,int y){
int i;
chk[x]=y;
for(i=1;i<=n;i++){
if(!net[x][i]) continue;
if(net[x][i] && chk[i]==y){
printf("No\n");
exit(0);
}
if(chk[i]==((p==y)?q:p)) continue;
ff(i,((p==y)?q:p));
}
}
int main(){
int i,j,h;
scanf("%d %d",&n,&k);
for(i=1;i<=n;i++){
scanf("%s",s[i]);
m[i]=strlen(s[i]);
}
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
if(is_ok(i,j)) net[i][j]=net[j][i]=1;
else net[i][j]=net[j][i]=0;
}
}
for(i=1;i<=n;i++){
if(chk[i]) continue;
cnt+=2;
p=cnt-1;
q=cnt;
ff(i,p);
}
p=chk[1];
for(i=1;i<=n;i++){
if(p-chk[i]) break;
p=chk[i];
}
if(i==n+1){
printf("Yes\n");
printf("2\n");
for(i=2;i<=n;i++) printf("1\n");
}else{
printf("Yes\n");
for(i=1;i<=n;i++) printf("%d\n",chk[i]%2+1);
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |