Cod sursa(job #2835275)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 18 ianuarie 2022 13:54:55
Problema Ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>

using namespace std;

ifstream cin( "ordine.in" );
ofstream cout( "ordine.out" );

int a[ 45 ];
char c[ 1000003 ];

int main()
{
    string s;
    cin >> s;
    int right = s.size();

    if( right == 1 ) {
        cout << s << '\n';
        return 0;
    }

    for( int i = 0; i < right; i++ )
        ++a[ s[ i ] - 'a' + 1 ];

    bool ok = false;
    int n = right;
    for( int i = 1; i <= n; i++ ) {
      ok = false;
      for( int j = 1; j <= 26; j++ )
        if( a[ j ] >= ( n - i + 1 ) / 2 + 1 && j + 'a' - 1 != c[ i - 1 ] ) {
          ok = true;
          c[ i ] = j + 'a' - 1;
          --a[ j ];
          break;
        }

      if( !ok )
        for( int j = 1; j <= 26; j++ )
          if( a[ j ] != 0 && j + 'a' - 1 != c[ i - 1 ] ) {
            c[ i ] = j + 'a' - 1;
            --a[ j ];
            break;
          }
    }

    cout << c + 1;
    return 0;
}