zoukankan      html  css  js  c++  java
  • 2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest C

    2017-2018 ACM-ICPC, NEERC, Northern Subregional Contest

    C

    好久前做的,忘记了,,, 好像是个图论瞎搞题。。

    #include<bits/stdc++.h>
    using namespace std;
    #pragma comment(linker, "/STACK:102400000,102400000")
    #define rep(i,a,b) for (int i=a; i<=b; ++i)
    #define per(i,b,a) for (int i=b; i>=a; --i)
    #define mes(a,b)  memset(a,b,sizeof(a))
    #define INF 0x3f3f3f3f
    #define MP make_pair
    #define PB push_back
    #define fi  first
    #define se  second
    typedef long long ll;
    const int N = 1000005;
    
    char s[N], vow[10] = { 'a', 'e', 'i', 'o', 'u', 'w', 'y' };
    int len, con[21], num[28][28];
    vector< int > G[28];
    bool vis[28], vis1[28];
    bool is(char x)  {
        rep(i,0,6)
            if(x==vow[i])
                return false;
        return true;
    }
    int dfs(int u)
    {
        vis1[u] = true;
        int ans = 0;
        for(auto to : G[u])
        {
            if(vis[u] ^ vis[to] == 1) ans += num[u][to];
            if(!vis1[to])  ans += dfs(to);
    
        }
        return ans;
    }
    int main()
    {
        freopen("consonant.in","r",stdin); freopen("consonant.out","w",stdout);
        scanf("%s", s+1);
        len = strlen(s+1);
        rep(i,1,len-1)
        {
            if(is(s[i]) && is(s[i+1])) {
                int ch1=s[i]-'a', ch2=s[i+1]-'a';
                if(num[ch1][ch2]==0) G[ch1].PB(ch2);
                if(num[ch2][ch1]==0) G[ch2].PB(ch1);
                ++num[ch1][ch2];
                ++num[ch2][ch1];
            }
        }
        int cnt = 0;
        rep(i,0,25)
            if(is('a'+i))
                con[cnt++] = i;
        int ans = 0, mx = -1;
        rep(i,0,(1<<19)-1)
        {
            mes(vis, false);
            rep(j,0,18) {
                if((i>>j)&1) vis[con[j]]=true;
            }
            mes(vis1, false);
            int ans1 = 0;
            rep(j,0,18) {
                int ch = con[j];
                if(!vis1[ch]) ans1 += dfs(ch)/2;
            }
            if(ans < ans1) ans=ans1, mx=i;
        }
        mes(vis, false);
        if(mx != -1) {
            rep(j,0,18) {
                if((mx>>j)&1) vis[con[j]]=true;
            }
        }
        rep(i,1,len) putchar(vis[s[i]-'a'] ? (s[i]-32) : s[i]);
        puts("");
    
        return 0;
    }
  • 相关阅读:
    mysql性能优化
    pymysql模块
    mysql数据表约束
    MySQL数据库
    IO模型
    8451
    8946531
    6783
    256213
    27822
  • 原文地址:https://www.cnblogs.com/sbfhy/p/7843894.html
Copyright © 2011-2022 走看看