贪心策略 \colorbox{orange}{贪心策略} 贪心策略
把 奇 数 ( a , c , e . . . ) 单 独 拿 出 来 , 凑 成 串 a , 偶 数 字 母 ( b , d , f . . . ) 拿 出 来 凑 成 b 把奇数(a,c,e...)单独拿出来,凑成串a,偶数字母(b,d,f...)拿出来凑成b 把奇数(a,c,e...)单独拿出来,凑成串a,偶数字母(b,d,f...)拿出来凑成b
那 么 如 果 有 答 案 一 定 是 a + b 或 b + a , 否 则 无 解 那么如果有答案一定是a+b或b+a,否则无解 那么如果有答案一定是a+b或b+a,否则无解
首 先 a + b 时 首先a+b时 首先a+b时
奇 数 串 的 最 后 一 个 位 置 和 偶 数 串 第 一 个 位 置 相 连 , 差 值 最 大 奇数串的最后一个位置和偶数串第一个位置相连,差值最大 奇数串的最后一个位置和偶数串第一个位置相连,差值最大
然 后 b + a 然后b+a 然后b+a
偶 数 串 最 后 一 个 位 置 和 奇 数 串 第 一 个 位 置 相 连 , 差 值 可 能 也 很 大 偶数串最后一个位置和奇数串第一个位置相连,差值可能也很大 偶数串最后一个位置和奇数串第一个位置相连,差值可能也很大
因 为 差 值 越 大 越 好 ( 因 为 无 论 如 何 差 值 大 于 等 于 1 , 但 是 不 能 等 于 1 ) 因为差值越大越好(因为无论如何差值大于等于1,但是不能等于1) 因为差值越大越好(因为无论如何差值大于等于1,但是不能等于1)
#include <bits/stdc++.h>
using namespace std;
int num[27],t;
string s;
void print(vector<int> a){
for(int i=0;i<a.size();i++) cout<<char(a[i]+'a');
}
int main()
{
cin>>t;
while(t--)
{
vector<int>ou,ji;
ou.clear();ji.clear();
memset(num,0,sizeof(num));
cin>>s;
int n=s.length();
for(int i=0;i<n;i++) num[s[i]-'a']++;
for(int i=0;i<26;i+=2) while(num[i]--) ou.push_back(i);
for(int i=1;i<26;i+=2) while(num[i]--) ji.push_back(i);
if(ji.size()==0||ou.size()==0) print(ji),print(ou);
else if(abs(ou[ou.size()-1]-ji[0])!=1)
print(ou),print(ji);
else if(abs(ji[ji.size()-1]-ou[0])!=1)
print(ji),print(ou);
else cout<<"No answer";
cout<<endl;
}
}