P4290 [HAOI2008]玩具取名

· · 题解

我觉得上一位大神的题解写的不错

美中不足的就是他的代码写的太丑

所以我来贴一个美化版的代码

嘻嘻嘻

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