记录编号 |
266507 |
评测结果 |
AAAAA |
题目名称 |
[冲刺NOIP2014]编码 |
最终得分 |
100 |
用户昵称 |
521 |
是否通过 |
通过 |
代码语言 |
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(){;}