Codefores 539A 字符串基础

疯狂看了几天小说,堕落不已。

题目连接:

点击打开链接

思路:

和前面一场的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>


你可能感兴趣的:(Codefores 539A 字符串基础)