记录编号 288258 评测结果 AAAAAAAAAW
题目名称 [HAOI 2008]玩具取名 最终得分 90
用户昵称 GravatarAntiLeaf 是否通过 未通过
代码语言 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;
}