P4290 [HAOI2008]玩具取名

Horrigue_袁四爷

2018-04-03 19:08:56

Solution

我觉得上一位大神的题解写的不错 美中不足的就是他的代码写的太丑 所以我来贴一个美化版的代码 嘻嘻嘻 ``` #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char s[210]; int num[5],list[210][3],tot,f[210][210][5],len; bool p; inline int check(char i){ if(i=='W') return 1; if(i=='I') return 2; if(i=='N') return 3; if(i=='G') return 4; } int main(){ for(register int i=1;i<=4;++i) scanf("%d\n",&num[i]); for(register int i=1;i<=4;++i){ for(register int j=1;j<=num[i];++j){ char ss[5]; scanf("%s",ss); list[++tot][0]=i; list[tot][1]=check(ss[0]); list[tot][2]=check(ss[1]); } getchar(); } gets(s+1); len=strlen(s+1); for(register int i=1;i<=len;++i) f[i][i][check(s[i])]=1; for(register int i=len;i>0;--i) for(register int j=i+1;j<=len;++j) for(register int k=i;k<j;++k) for(register int l=1;l<=tot;++l) if(f[i][k][list[l][1]]&&f[k+1][j][list[l][2]]) f[i][j][list[l][0]]=1; for(register int i=1;i<=4;++i) if(f[1][len][i]){ p=1; if(i==1) printf("W"); if(i==2) printf("I"); if(i==3) printf("N"); if(i==4) printf("G"); } if(!p) printf("The name is wrong!\n"); return 0; } ```