记录编号 |
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(){;}