记录编号 266507 评测结果 AAAAA
题目名称 [冲刺NOIP2014]编码 最终得分 100
用户昵称 Gravatar521 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2016-06-07 20:14:05 内存使用 0.00 MiB
显示代码纯文本
#include<stdio.h>
#include<string.h>
struct compare{
	char com[300];
	int length1,length2;
}a[200];
char b[300],_b[300];
int f[3000]={0},len=1;
bool flag=false,_flag=false;
void scanff()
{
	while(scanf("%s",a[len].com)!=EOF)
	{
		if(a[len].com[0]<='z'&&a[len].com[0]>='a')
		{flag=true;strcpy(_b,a[len].com);return;}
		for(int j=0;j<strlen(a[len].com);j++)
		  if(a[len].com[j]=='0'||a[len].com[j]=='1') a[len].length1++;
		  else if(a[len].com[j]>='a'&&a[len].com[j]<='z') a[len].length2++;
		len++;
	}
}
bool find(int i,int j)
{
	for(int k=1;k<=a[j].length2;k++)
	  if(a[j].com[k]!=b[i+k-1])
	    return false;
	return true;
}
int _521()
{
	freopen("compare.in","r",stdin);
	freopen("compare.out","w",stdout);
	int n;
	scanf("%d",&n);
	while(n--)
	{
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(f,127,sizeof(f));
		if(!flag)scanf("%s",b);
		else strcpy(b,_b),flag=false;
		scanff();f[0]=0;_flag=false;
		int m=strlen(b);
		for(int i=1;i<=m;i++)
		{
			for(int j=1;j<len;j++)
			  if(find(i-1,j))
			    if(f[i+a[j].length2-1]>f[i-1]+a[j].length1)
			    i+a[j].length2-1==m?_flag=true:true,
			    f[i+a[j].length2-1]=f[i-1]+a[j].length1;
		}
		printf("%d\n",_flag?f[m]:0);
	}
	return 0;
}
int _520=_521();
int main(){;}