Cod sursa(job #1727343)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 10 iulie 2016 16:26:37
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <iostream>
#include <math.h>
#include <algorithm>

using namespace std;
#define ll long long
#define llu long long unsigned
#define pb push_back
#define mp make_pair

string problemName = "ordine";
string inFile = problemName+".in";
string outFile = problemName+".out";
ifstream fin(inFile.c_str());
ofstream fout(outFile.c_str());

int ap[26];

int main(){
    string s;
    fin>>s;
    int i,j;
    char ch;
    int n = s.size();
    for(i = 0;i < n;i++){
        ap[s[i]-'a']++;
    }
    string ans = " ";
    for(i = 1;i <= n;i++){
        int L = (n-i+1)/2+1;
        ch = '.';
        for(j = 0;j < 26;j++){
            if(ap[j] == L){
                ch = j+'a';
                break;
            }
        }
        if(ch != '.'){
            ap[ch-'a']--;
            ans += ch;
        }else{
            for(j = 0;j < 26;j++){
                if(ap[j] && j+'a' != ans[i-1]){
                    char ch2 = j+'a';
                    ap[j]--;
                    ans += ch2;
                    break;
                }
            }
        }
    }
    ans.erase(ans.begin(), ans.begin()+1);
    fout<<ans;
    return 0;
}