Codeforces Round #307 (Div. 2) B. ZgukistringZ

Note

In the third sample, this optimal solutions has three non-overlaping substrings equal to eitherborcon positions1–2(ab),3–4(ab),5–7(aca). In this sample, there exist many other optimal solutions, one of them would beacaababbcc.

这题因为字母可以随意调换,所以先数出a,b,c三个字符串所有字母表中的字母的个数,,然后看最多能填充多少个b字符串minx,然后填充0~minx个字符串,再看在当前情况下能填充多少个c字符串,计算最大值。

#include<stdio.h>#include<string.h>char s1[100006],s2[100006],s3[100006];int a[30],b[30],c[30],a1[30];int main(){int n,m,i,j,len1,len2,len3,minx1,minx2,maxx,minx,t1,t2;while(scanf("%s",s1)!=EOF){scanf("%s%s",s2,s3);len1=strlen(s1);len2=strlen(s2);len3=strlen(s3);memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));memset(a1,0,sizeof(a1));for(i=0;i<len1;i++){a[s1[i]-'a']++;a1[s1[i]-'a']++;}for(i=0;i<len2;i++){b[s2[i]-'a']++;}for(i=0;i<len3;i++){c[s3[i]-'a']++;}minx1=200006;for(i=0;i<=25;i++){if(b[i]==0)continue;if(minx1>(a[i]/b[i]))minx1=a[i]/b[i];}minx2=200006;for(i=0;i<=25;i++){if(c[i]==0)continue;if(minx2>(a[i]/c[i]))minx2=a[i]/c[i];}maxx=minx2;t1=0;t2=minx2;for(i=1;i<=minx1;i++){minx=200006;for(j=0;j<=25;j++){a[j]-=b[j];}for(j=0;j<=25;j++){if(c[j]==0)continue;if(minx>(a[j]/c[j]))minx=a[j]/c[j];}if(maxx<minx+i){maxx=minx+i;t1=i;t2=minx;}}for(i=1;i<=t1;i++)printf("%s",s2);for(i=1;i<=t2;i++)printf("%s",s3);for(i=0;i<=25;i++){a1[i]=a1[i]-t1*b[i]-t2*c[i];for(j=1;j<=a1[i];j++){printf("%c",'a'+i);}}printf("\n");}return 0;}

怕仍是不能。于是他们比任何人都看的清楚,又比任何人都看的不确切。

Codeforces Round #307 (Div. 2) B. ZgukistringZ

相关文章:

你感兴趣的文章:

标签云: