记录编号 |
288258 |
评测结果 |
AAAAAAAAAW |
题目名称 |
[HAOI 2008]玩具取名 |
最终得分 |
90 |
用户昵称 |
AntiLeaf |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
1.455 s |
提交时间 |
2016-08-02 19:23:56 |
内存使用 |
0.71 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=210;
char s[maxn],c,d;
int n,m[4],a[maxn],id[127];
bool e[10][10][10]={{{false}}},f[maxn][maxn][10]={{{false}}};
int main(){
#define MINE
#ifdef MINE
freopen("name.in","r",stdin);
freopen("name.out","w",stdout);
#endif
id['W']=1;
id['I']=2;
id['N']=3;
id['G']=4;
for(int i=1;i<=4;i++)scanf("%d",&m[i]);
for(int i=1;i<=4;i++){
n=m[i];
for(int j=1;j<=n;j++){
scanf(" %c %c",&c,&d);
e[id[(int)c]][id[(int)d]][i]=true;
}
}
scanf(" %s",s+1);
n=strlen(s+1);
for(int i=1;i<=n;i++){
a[i]=id[(int)s[i]];
f[i][i][a[i]]=true;
}
for(int d=2;d<=n;d++)
for(int i=1,j;i+d-1<=n;i++){
j=i+d-1;
for(int k=1;k<=4;k++)
for(int p=i;p<j;p++)
for(int l=1;l<=4;l++)
for(int r=1;r<=4;r++)
if(e[l][r][k])
f[i][j][k]|=f[i][p][l]&f[p+1][j][r];
}
if(f[1][n][1])putchar('W');
if(f[1][n][2])putchar('I');
if(f[1][n][3])putchar('N');
if(f[1][n][4])putchar('G');
if(!f[1][n][1]&&!f[1][n][2]&&!f[1][n][3]&&!f[1][n][4])printf("The name is wrong!");
return 0;
}