Sunday, 24 May 2015

Devu and decorating birthday cake ARRANGE BALOONS SO THAT NO TWO BALOON WILL BE ADJECENT

Devu and decorating birthday cake 
Solved

Problem code: REARRSTR

All submissions for this problem are available.

Read problems statements in Mandarin Chinese and Russian as well.

Today is Devu's birthday. He has obtained few colored balloons from his friends. You are given this information by a string s consisting of lower case English Latin letters. Each letter (from 'a' to 'z') denotes a color. e.g. if s = "aab", then it means that he has received two balloons of color 'a' whereas one balloon of color 'b'.
Now, Devu wants to decorate the cake by arranging all the balloons linearly from left to right on the cake such that no same colored balloons are nearby/ adjacent to each other.
Now Devu wonders whether it is possible to do so or not? Please help him in this. If it is not possible to do so, print -1. Otherwise, print any one of arrangements of the balloons on the cake. If there are more than one possible ways of doing so, you can print any one of them.

Input

  • The first line of the input contains an integer T denoting the number of test cases. The description of T test cases follows.
  • First line of each test case will contain string s

Output

Print a single line corresponding to the answer of the problem.

Constraints

  • 1 ≤ T ≤ 105
  • 1 ≤ size of string s ≤ 105
  • Sum of size of string s over all test cases will be less than or equal to ≤ 106

Example

Input:
3
aab
ab
aa
Output:
aba
ab
-1

Explanation

Example case 1. He can arrange the balloons in the order given by the following string "aba".
Example case 2. He can arrange the balloons in the order given by the following string "ab"
Example case 3. There is no valid way of decorating cakes with balloon in the desired way. So we print -1.



/**********************************************************editorial*******************************************************
  count hash of all ballons and check for the possiblity of answer ..
   if  ballon with colour having maximum count is greater than half of rest all ballons (in case of  even no of ballons )   OR  if no total ballon is odd than maximu>rest/2+1 than answer not exit ..
else
recunstruct an array which consist of  ballons according to frequency -- ex aabbbbbccc  will be recunstructed as bbbbbcccaa .. 
 now contruct ans array whic contain 1 element from start ie index 0  and next from middle , ie.
0th index, mid index ,1st index ,mid+1 index 2 nd index ,mid+2 index and so on ..... 

*******************************************code**************************************************************************
#include<iostream>
using namespace std;
char arr[1000000];
char ans[1000000];

#include<bits/stdc++.h>
 int  main()
 {
  long long int  t; 
  cin>>t;
   while(t--)
    {
    long long int  n;
        cin>>arr;
        long long int  len=strlen(arr);
           //sort(arr,arr+len);
         
           long long int sum=0;
            long long int has[28];
            vector<pair<int,int> >v;
             for(int i=0;i<=27;i++) has[i]=0;
             for(int i=0;i<len;i++)
              {
              has[arr[i]-'a']++;
             
              }
               for(int i=0;i<26;i++)
                {
                v.push_back(make_pair(has[i],i));
                }
              sort(has,has+26);
              
              sort(v.begin(),v.end());
              int top=0;
              vector<pair<int,int> > ::iterator it;
              for( it=v.end();it>=v.begin();it--)
               {
                int c=it->first;
                // cout<<"c is "<<c<<endl;
                 for(int j=0;j<c;j++)
                  {
                  arr[top]=it->second+'a';
                  top++;
                  }
               }
               
               
               
               
              for(int i=0;i<25;i++) sum+=has[i];
           
               if(len%2==1 && has[25]-sum>1)
                cout<<"-1"<<endl;
                else if(len%2==0 && has[25]-sum>0) 
                 {
                  cout<<"-1"<<endl;
                 }
            else
             {
              long long int  mid=0;
              if(len%2==1)
              {
              mid=(len/2)+1;
              }
              else mid=len/2;
              long long int  j=mid;
              long long int  tv=-1;
                for(long long int  i=0;i<mid;i++,j++)
{
 
ans[++tv]=arr[i];
ans[++tv]=arr[j];
}
 for(long long int  i=0;i<len;i++)
   cout<<ans[i];
    cout<<endl;
             }
            
   
    }
    return 0;
 }

No comments:

Post a Comment