题意:给出不超过100组的字符串,每个字符串长度不超过100,重新排列字符串,使相邻字符间不能想连比如(abc,bc,cb,de,ed)就是相连的。
思路:奇数偶数字母分开,然后输出也可以,不过这道题随机化字母输出很简单。
#include<bits/stdc++.h>
#define random(x) (rand()%x)
using namespace std;
string s;
int t;
int main() {
cin >> t;
while(t--) {
s.clear();
cin >> s;
vector<int>v;
int cd[100];
memset(cd, 0, sizeof cd);
for(int i = 0; i < s.size(); i++) {
cd[s[i] - 'a']++;
}
for(int i = 0; i < 100; i++) {
if(cd[i])
v.push_back(i);
}
int k = 5000, is = 0;
while(k--) {
random_shuffle(v.begin(), v.end());
int f = 0;
for(int i = 0; i < v.size(); i++) {
if(i < v.size() - 1)
if(v[i] == (v[i + 1] + 1) || (v[i] == (v[i + 1] - 1))) {
f = 1;
}
}
if(!f) {
is = 1;
break;
}
}
if(is == 0) {
cout << "No answer" << endl;
} else {
for(int i = 0; i < v.size(); i++) {
int p = v[i];
while(cd[p]--)
cout << (char)(v[i] + 'a');
}
cout << endl;
}
}
return 0;
}