fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i, n) for (int i = 0; i < (n); i++)
  4.  
  5. bool compare(char a,char b){
  6. return a>=b;
  7. }
  8.  
  9. int main(){
  10. string a;cin>>a;
  11. int len=a.size();
  12. int fre[26]={0};
  13. rep(i,len){
  14. fre[a[i]-'a']++;
  15. }
  16. string ans="";
  17. rep(i,26){
  18. while(fre[i]>1 && i!=25){//For every two frequencies for given char append one char.
  19. char t='a'+i+1;
  20. ans.push_back(t);
  21. //cout<<t<<" "<<ans<<endl;
  22. fre[t-'a']++;
  23. if(fre[t-'a']>1) ans.pop_back();
  24. else if(fre[t-'a']==1) fre[t-'a']--;
  25. fre[i]-=2;
  26. }
  27. while(i==25 && fre[i]>0){//Append all 'z' characters found in string
  28. char t='a'+i;
  29. ans.push_back(t);
  30. fre[i]--;
  31. }
  32. if(fre[i]==1){
  33. char t='a'+i;
  34. ans.push_back(t);
  35. //cout<<t<<" "<<ans<<endl;
  36. fre[i]--;
  37. }
  38. }
  39. sort(ans.begin(),ans.end(),compare);
  40. for(int i=0;ans[i]!='\0';i++){
  41. cout<<ans[i];
  42. }
  43. return 0;
  44. }
Success #stdin #stdout 0s 15240KB
stdin
aabbcc
stdout
dcb