zoukankan      html  css  js  c++  java
  • CodeForces 593A

    题目链接:

    http://codeforces.com/problemset/problem/593/A

    题意:

    给你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)

    解题思路:

    我觉得重点在这

    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;

    程序代码:

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    using namespace std;
    #define LL long long
    
    
    int MAX(int x,int y)
    {
     if(x>y) return x;
     else    return y;
    }
    int main()
    {
    int n,ans,sum,i,j,a[30][30],v[30],len,f[3];
    char str[1000+10];
       cin>>n;
      memset(a,0,sizeof(a));
    while(n--)
    {
    cin>>str;
    len=strlen(str);
    ans=0;
     memset(v,0,sizeof(v));
     memset(f,-1,sizeof(f));
     for(j=0;j<len;j++)
      {
        if(!v[str[j]-'a'])
        {
         v[str[j]-'a']=1;
         f[ans++]=str[j]-'a';
        }
        if(ans>2) break;
       }
       if(j==len)
        a[f[0]+1][f[1]+1]+=len;
    }
    
    sum=0;
     for(i=1;i<27;i++)
        for(j=i+1;j<27;j++)
         sum=MAX(sum,a[i][j]+a[j][i]+a[i][0]+a[j][0]);
    cout<<sum<<endl;
     return 0;
    }
    View Code
  • 相关阅读:
    题库重整
    计算几何练习题――直线交点
    An Easy Task
    简单排序
    IBM Minus One
    Binary Numbers
    去掉VS2010代码中文注释的红色下划线
    【转】Windows socket基础
    【STL】vector的insert方法详解
    window7下 cocos2dx android交叉编译环境部署小结
  • 原文地址:https://www.cnblogs.com/www-cnxcy-com/p/5539837.html
Copyright © 2011-2022 走看看