疯狂看了几天小说,堕落不已。
题目连接:
点击打开链接
思路:
和前面一场的CF A题有点像,从字母的角度出发。
两种情况:
1.维护单独一个字母的长度,cnt [i]。也就是说如果这一行只有这一种字母,cnt[i] + = strlen(s);
2.维护任意两个字母搭配起来的长度 cnt [i] [j]。如果这一行只有两种字母,cnt[ch1-'a'][ch2-'a'] += strlen(s)。当然,你需要想一个办法判断出ch1,和ch2是什么。
最后的答案就是maxx=max{cnt[i]+cnt[j]+cnt[i][j] , maxx};
代码如下:
<span style="font-size:14px;">#include <iostream> #include <string.h> #include <stdio.h> using namespace std; char f[3]; char s[1005]; void fun(char s[]) { f[0]=f[1]=s[0]; int i,len; len=strlen(s); for(i=1;i<len;i++) if(s[i]!=f[0]) { f[1]=s[i]; break; } } int check(char s[]) { fun(s); int i,len; len=strlen(s); for( i=2;i<len;i++) if(s[i]!=f[0] && s[i]!=f[1]) return 1; return 0; } int main() { int ans,n,i,j,sum[30],cnt[30][30],maxx; while(scanf("%d",&n)!=EOF) { maxx=0; memset(sum,0,sizeof(sum)); memset(cnt,0,sizeof(cnt)); for(i=0;i<n;i++) { scanf("%s",s); if(check(s)){ continue;} if(f[0]==f[1]) sum[f[0]-'a']+=strlen(s); else { if(f[0]>f[1]) swap(f[0],f[1]); cnt[f[0]-'a'][f[1]-'a']+=strlen(s); } } for(i=0;i<26;i++) for(j=i+1;j<26;j++) { ans=sum[i]+sum[j]+cnt[i][j]; if(ans>maxx) maxx=ans; } printf("%d\n",maxx); } return 0; } </span>