zoukankan      html  css  js  c++  java
  • 随笔—邀请赛前练— Codeforces Round #329 (Div. 2) 2Char

    题意:给你多个字符串,只保留2及2个以内的字符,丢弃多余的字符串,问你最后留下的字符串最长能有多长?

    思路:

    1、 对每个字符串处理出  process[fir][sec]  只包含fir字符和sec字符 当前的最大长度。当然,超过2个字符的字符串自动跳过。

    2、 注意合并 process[fir][sec]、process[sec][fir]、process[fir][0]、process[sec][0] 

    3、 合并的过程还要注意特殊情况 process[fir][0] + process[sec][0]   .注意去除fir==sec的情况。

    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<iostream>
    #include<map>
    using namespace std;
    
    
    #define  MAX(x,y) (((x)>(y)) ? (x) : (y))
    #define  MIN(x,y) (((x) < (y)) ? (x) : (y))
    #define ABS(x) ((x)>0?(x):-(x))
    
    int pos[3];
    int process[30][30];
    int vis[30];
    
    int main()
    {
        char str[1010];
        int n;
        cin>>n;
        while(n--){
            int cnt=0;
            memset(pos,0,sizeof(pos));
            memset(vis,0,sizeof(vis));
            cin>>str;
            int len=strlen(str);
            for(int i=0; i<len; i++){
                int num=str[i]-'a'+1;
                if( !vis[num] ){
                    vis[num]=1;
                    pos[cnt++]=num;
                }
                if(cnt == 3)
                    break;
            }
            if(cnt != 3){
                int fir = pos[0];
                int sec = pos[1];
                process[fir][sec] += len;
            }
        }
    
        int mmax=0;
        for(int i=1; i<=26; i++){
            for(int j=0; j<26; j++){
                int sum=0;
                if(j!=0 && process[i][j]){
                    sum += process[i][j] + process[j][i] + process[i][0] + process[j][0];
                }
                if(j==0){
                    for(int k=1; k<=26; k++){
                        if(k == i)
                            continue;
                        sum=0;
                        sum += process[i][0] + process[k][0];
                        mmax=MAX(sum,mmax);
                    }
                }
                mmax=MAX(sum,mmax);
            }
        }
        cout<<mmax<<endl;
        return 0;
    }
  • 相关阅读:
    表详细操作
    库相关操作
    数据库一
    协程
    多线程2
    .Net鼠标随动窗口
    .Net操作音频
    .Net操作注册表--un
    .Net操作.exe文件
    .Net连接数据库(AOD.Net)
  • 原文地址:https://www.cnblogs.com/shawn-ji/p/5539394.html
Copyright © 2011-2022 走看看