http://codeforces.com/contest/1156/problem/B
题目:讲一个给定的字符串(只包含小写字母)重新排序,要求相邻字符在字母表中不相邻
解:将奇数偶数字母分开,奇数的字符存起来再加上偶数的,或者偶数的加上奇数的就是答案,如果不行的话,输出No answer
#include<cstdio>
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
string ans,s;
int T,len,q[30];
bool flag;
bool check(int x)
{
ans = "";
for(int i = 0;i < 26; i++)
if(i % 2 == x)
{
for(int j = 0;j < q[i]; ++j)
ans += (i + 'a');
}
for(int i = 0;i < 26; i++)
if(i % 2 != x && q[i])
{
//cout<<ans<<endl; cout<<i<<endl;
if(abs(ans[ans.size() - 1] - (i + 'a')) == 1) return 0;
else for(int j = 0;j < q[i]; ++j) ans += (i + 'a');
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
cin>>s;
len = s.size();
flag = 1;
memset(q,0,sizeof(q));
for(int i = 0;i < len; ++i)
q[s[i] - 'a']++;
if(check(0) || check(1)) cout<<ans<<'\n';
else printf("No answer\n");
}
return 0;
}