1. 程式人生 > >codeforces 600C(貪心)

codeforces 600C(貪心)

題意:給你一個字串,你可以改變它的任意字元,且可以任意調換字元順序,輸出字元改變次數最少的字典序序最小的字串。(改變順序次數不計)。

思路:記錄所有字元出現的次數,從小到大,當出現次數為奇數時,找到最右邊一個出現次數為奇數的字元,左邊字元數+1,右邊字元數-1。處理到最後一定會是最多隻存在一個出現次數為奇數的字元。然後從a到z輸出一下就是,注意aabbbcc輸出abcbcba。

/*
           ┏┓   ┏┓
      ┏┛┻━━━┻┗┓
      ┃       ┃
      ┃   ━   ┃
      ┃ ┳┛ ┗┳ ┃
      ┃       ┃
      ┃   ┻   ┃
      ┗━┓     ┏━┛
        ┃ 一  ┃
        ┃ 發  ┃
        ┃  A  ┃
        ┃  C  ┃
  ┏━━━━┛    ┃
 ┏┫          ┃
 ┗┓ ***         ┃
  ┗┓┏┳━━┓┏┏┛
   ┣┣┃   ┣┣┃
   ┗┻┛   ┗┻┛

*/
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <algorithm>
#include <math.h>
#include <vector>
#include <map>
#define LL long long
#define maxn 200005
using namespace std;
map<char,int>m;
int main()
{
    string s;
    cin>>s;
    for(int i=0;i<s.length();i++)
        m[s[i]]++;
    char tmp='0';
    for(int i=0;i<26;i++)
    {
        if(m[i+'a']%2==1)
        {
            int j=25;
            while(m[j+'a']%2==0&&i<j)j--;
//            if(i!=j&&m[j+'a']%2==1)
//            {
//                m[i+'a']++;
//                m[j+'a']--;
//            }
            if(i==j)
            {
                m[i+'a']--;
                tmp='a'+i;
            }
            else
            {
                m[i+'a']++;
                m[j+'a']--;
            }
        }
    }
    string ans;
    for(int i=0;i<26;i++)
    {
        if(m[i+'a']%2==0)
        {
            int cnt=m[i+'a']/2;
            for(int j=0;j<cnt;j++)
                ans.push_back(i+'a');
        }
    }
    if(tmp!='0')
        ans.push_back(tmp);
    for(int i=25;i>=0;i--)
    {
        if(m[i+'a']%2==0)
        {
            int cnt=m[i+'a']/2;
            for(int j=0;j<cnt;j++)
                ans.push_back(i+'a');
        }
    }
    cout<<ans<<endl;
}

相關推薦

codeforces 600C貪心

題意:給你一個字串,你可以改變它的任意字元,且可以任意調換字元順序,輸出字元改變次數最少的字典序序最小的字串。(改變順序次數不計)。 思路:記錄所有字元出現的次數,從小到大,當出現次數為奇數時,找到最右邊一個出現次數為奇數的字元,左邊字元數+1,右邊字元數-1。處理到最

CodeForces 508C 貪心

Description Anya loves to watch horror movies. In the best traditions of horror, she will be visited by m ghosts tonight. Anya has

Codeforces 1119E貪心

() lan 貪心 target 題目 n) return else href 題目傳送 貪心方法 按邊從小到大掃,先湊3個,沒湊足的記錄一下數量,後面大的優先跟這些湊,倆帶走一個,多余的再湊3個,再……就這樣走到最後即可。 const int maxn = 3e5 + 5

Codeforces Round #513 D - Social Circles貪心

std typedef ORC using codeforce names nbsp 代碼 code 題目大意:有n(n≤105)個人排成一圈,第i個人要求自己左邊空出li個座位,右邊空出ri(li,ri≤109)個座位。問最少需要安排多少個座位。思路:一開始先假設每

CodeForces - 140C】New Year Snowmen 貪心

題幹: As meticulous Gerald sets the table and caring Alexander sends the postcards, Sergey makes snowmen. Each showman should consist of three snowb

[Codeforces 1070F]Debate貪心

Address 洛谷 RemoteJudge Codeforces 1070F Meaning Alice 和 Bob 參加選舉 有 n

Codeforces 1041C貪心+set

傳送門 題面: C. Coffee Break time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard o

CodeForces-1040B Shashlik Cooking貪心

題目大意: n個節點,選擇一個節點的時候翻轉這個節點與兩側k個節點(夠的話),求最少幾次全部翻到反面。 ps:同一個節點翻兩次會翻回正面。 思路: 貪心,儘量多的選能翻翻2k+1個節點的節點,即在中間儘量多的劃分長度為2k+1的區間。為使中間節點數恰好為(2k+1)的

codeforces -63B貪心,求做後達標需要的天數

題面: In a strategic computer game "Settlers II" one has to build defense structures to expand and protect the territory. Let's take one of

Educational Codeforces Round 49 (Rated for Div. 2)-D-Mouse Hunt貪心

D. Mouse Hunt time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Medic

Educational Codeforces Round 49 (Rated for Div. 2)-C-Minimum Value Rectangle貪心

C. Minimum Value Rectangle time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard

CodeForces 437C 貪心,拓撲排序

題意: 給出一個n個點m條邊的圖,每個點有一個權值。每次分割出一個點,代價是該點相鄰點的權值和,問分割所有的點最小的代價是多少。 思路: 建成有向圖,方向從權值大的點指向權值小的點,邊權為兩個點權中小的那個。 然後從入度最小的點開始分割,邊分割邊修改入度,一直取入度最小的

CodeForces 455C 貪心,並查集

題意: 給出一個n個點m條邊的森林,q次詢問,第一種詢問要求輸出一個點所在樹的直徑,第二種詢問要求合併兩個點所在的樹。 思路: 先將初始的森林中各個樹的直徑求出來,然後用並查集維護。兩樹合併時,設直徑分別為len1,len2,新樹直徑為max(len1,len2,(len

Codeforces 777E貪心+單調棧

Codeforces 777E Hanoi Factory 題目: Hanoi Factory time limit per test1 second memory limit per test256 megabytes inputstandard input

Mike and distribution CodeForces - 798D 貪心+思維

題目連結 TAG: 這是我近期做過最棒的一道貪心思維題,不容易想到,想到就出乎意料。 題意:給定兩個含有N個正整數的陣列a和b,讓你輸出一個數字k ,要求k不大於n/2+1,並且輸出k個整數,範圍為1~n的不重複數字, 要求這k個數字為下標的對應a和b中的數的和乘以2的值  分別大於a和b 的

Find Amir CodeForces - 805C 貪心+思維

    A few years ago Sajjad left his school and register to another one due to security reasons. Now he wishes to find Amir, one of his schoolma

Balanced Ternary String CodeForces - 1102D 貪心+思維

You are given a string ss consisting of exactly nn characters, and each character is either '0', '1' or '2'. Such strings are called&nb

Codeforces Round #277 (Div. 2) A 水題B水題 C貪心

A. Calculating Function For a positive integer n let's define a function f: f(n) =  - 1 + 2 - 3 + .. + ( - 1)nn Your task is to calcul

Codeforces Round #501 (Div. 3) C貪心

C. Songs Compression time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output

CodeForces 287B--貪心、二分

題意:有2到k個出水管的k-1個水管,有n個房子,求用最少的水管把水送到每一家 分析:貪心思想從最大的開始用,只要求出等差數列的和大於等於n的最小的即為所求。暴力列舉會超時,所以用二分法找每次計算的等差數列和的最左值(注意:不用管實際結果是不是真的用等差數列,如:n=9,k