疯狂看了几天小说,堕落不已。
题目连接:
思路:
和前面一场的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>