Cod sursa(job #340822)

Utilizator szabotamasSzabo Tamas szabotamas Data 16 august 2009 18:01:56
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>

#define MAXC 27

using namespace std;

long v[MAXC],ok,q,i,st1,st2,k;
string s;

void sw(char &a, char &b){
	char x;
	x=a;
	a=b;
	b=x;
}

int main(){
	ifstream fin("ordine.in");
	ofstream fout("ordine.out");
	fin >> s;
	for (i=0; i<=(s.length()); i++){
		v[int(s[i])-96]++;
	}
	st1=1;
	st2=2;
	q=0;
 	while (st1<27 || st2<27){
		q++;
		ok=0;
		if(q%2==1){
			while((v[st1]==0 && st1<27) || (st1==st2 && st1<27)) ++st1;
			if(st1<27){
				s[q-1]=char(st1+96);
				v[st1]--;
				ok=1;
			}
		}
		if(ok==0){
			while((v[st2]==0 && st2<27)  || (st1==st2 && st2<27)) ++st2;
			if(st2<27){
				s[q-1]=char(st2+96);
				v[st2]--;
			}
		}
	}
	for (i=s.length()-2; i>=0; i--){
		if(s[i]!=s[i-1]) break;
	}
	if(i!=s.length()-2){
	for (; i<=s.length()-2; i++){
		sw(s[i],s[i-1]);
		k=i-1;
		while(s[k]==s[k-1]){
			k--;
			sw(s[k],s[k-1]);
			k--;
		}
	}
	}
	fout << s << "\n";
	return 0;
}