zoukankan      html  css  js  c++  java
  • 【Codeforces 600C】Make Palindrome

    【链接】 我是链接,点我呀:)
    【题意】

    题意

    【题解】

    计算出来每个字母出现的次数。 把字典序大的奇数出现次数的字母换成字典序小的奇数出现次数的字母贪心即可。 注意只有一个字母的情况 然后贪心地把字典序小的字母放在前面就好

    【代码】

    #include <bits/stdc++.h>
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define ll long long
    using namespace std;
    
    const int N = 2e5;
    
    string s;
    char ans[N+10];
    int cnt[30];
    
    int main(){
        ios::sync_with_stdio(0),cin.tie(0);
        cin >> s;
        rep1(i,0,(int)s.size()-1) cnt[s[i]-'a'+1]++;
        for (int i = 1;i <= 26;i++)
            if (cnt[i]&1){
                for (int j = 26;j >= i+1;j--)
                    if (cnt[j]&1){
                        cnt[i]++;
                        cnt[j]--;
                        break;
                    }
            }
        rep1(i,1,(int)s.size()/2){
            for (int j = 1;j <= 26;j++){
                if ( (cnt[j]>0 && cnt[j]%2==0) || (cnt[j]>2) ){
                    ans[i] = (char)(j+'a'-1);
                    ans[(int)s.size()-i+1] = ans[i];
                    cnt[j]-=2;
                    break;
                }
            }
        }
        if ((int)s.size()%2==1){
            for (int j = 1;j <= 26;j++)
                if (cnt[j]%2==1)
                    ans[(int)s.size()/2+1] = (char)(j+'a'-1);
        }
        for (int i = 1;i <= (int)s.size();i++){
            cout<<ans[i];
        }
    	return 0;
    }
    
  • 相关阅读:
    nefu17
    杭电1051
    杭电1050
    有关异或符号'^'在c++编程中的应用的讲解!!!
    杭电2095
    杭电2094
    关于set容器的简单讲解!!!
    拍拍开发
    收藏框架
    js form.submit() 无效
  • 原文地址:https://www.cnblogs.com/AWCXV/p/10651384.html
Copyright © 2011-2022 走看看