Codeforces Round #329 (Div. 2) 593A 2Char

来源:互联网 发布:项目数据库设计 编辑:程序博客网 时间:2024/06/08 19:08

题意:
给你n个单词,然后你要上交一些单词。这些单词只能由你选两个固定的字母组成,问最多能留下多少个字母。
思路:枚举 两个字母两个字母的枚举

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<queue>#include<stack>#include<string>#include<vector>#include<map>#include<set>using namespace std;#define rfor(i,a,b) for(i=a;i<=b;++i)#define lfor(i,a,b) for(i=a;i>=b;--i)#define sfor(i,a,h) for(i=h[a];i!=-1;i=e[i].next)#define mem(a,b) memset(a,b,sizeof(a))#define mec(a,b) memcpy(a,b,sizeof(b))#define cheak(i) printf("%d ",i)#define min(a,b) (a>b?b:a)#define max(a,b) (a>b?a:b)#define inf 0x3f3f3f3f#define lowbit(x) (x&(-x))typedef long long LL;#define maxn 1005#define maxm maxn*maxn#define lson(x) (splay[x].son[0])#define rson(x) (splay[x].son[1])int A[maxn];char str[105][maxn];int mark[105][26],sum[105]; int main(){    mem(sum,0);    int i,j,k,n;    scanf("%d",&n);    rfor(i,1,n)    {        scanf("%s",str[i]+1);        int len=strlen(str[i]+1);        rfor(j,1,len)        {            if(!mark[i][str[i][j]-'a'])            mark[i][str[i][j]-'a']=1,sum[i]++;        }    }    /*rfor(i,1,n)    {        rfor(j,0,25)        if(mark[i][j]) printf("%c ",'a'+j);        printf(":%d %d\n",strlen(str[i]+1),sum[i]);    }*/    int ans=0,t;    rfor(i,0,25)    {        rfor(j,i+1,25)        {            t=0;            rfor(k,1,n)            {                if(sum[k]==1)                {                    if(mark[k][i]||mark[k][j])                     {                        //printf("asd");                        t+=strlen(str[k]+1);                    }                }                else if(sum[k]==2)                {                    if(mark[k][i]&&mark[k][j]) t+=strlen(str[k]+1);                }            }            //printf("%d\n",t);            ans=max(ans,t);        }    }    printf("%d\n",ans);    return 0;}
0 0
原创粉丝点击