码迷,mamicode.com
首页 > 其他好文 > 详细

CodeForces 593A

时间:2016-05-26 21:54:21      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:

题意:给你弄n个字符串,字符串只包含小写字母,从中选取任意个字符串,拼成一封信,这封信中至多有两种字符,输出信的最大长度。

题解:对a~z进行编号为1~26,开一个二维数组a,a[i][j]表示出现第i个字母和第j个字母的长度,对所有的字符串进行处理,然后就可以对数组a进行扫描:

len=max(a[i][j]+a[j][i]+a[i][0]+[j][0]) ;(0<i<27,i<j<27)

 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

char s[1005];
int  a[30][30];
int  vis[30];

bool cmp(int x,int y)
{
    return x>y;
}

int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",s);
        memset(vis,0,sizeof(vis));
        int len=strlen(s);
        int ans=0;
        int pos[3];
        memset(pos,-1,sizeof(pos));
        int i;
        for(i=0;i<len;i++)
        {
            if(!vis[s[i]-a])
            {
                vis[s[i]-a]=1;
                pos[ans++]=s[i]-a;
            }
            if(ans>2) break;
        }
        if(i==len) a[pos[0]+1][pos[1]+1]+=len;
    }
    int cnt=0;
    for(int i=1;i<27;i++)
        for(int j=i+1;j<27;j++)
        {
            int sum=0;
            sum+=a[i][j];
            sum+=a[j][i];
            sum+=a[i][0];
            sum+=a[j][0];
            cnt=max(sum,cnt);
        }
    cout<<cnt<<endl;
    return 0;
}

 

CodeForces 593A

标签:

原文地址:http://www.cnblogs.com/mgxj/p/5532773.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!