题目链接
题目思路
还是要靠猜
结论就是相同的字符放在一起必定有一种答案最优不会证明
然后再用逆序对搞下即可
我的复杂度是(O(24n))标程为(O(n))
标程就是预处理了一下
代码
#include<bits/stdc++.h>
#define debug printf("
I am here
");
#define fi first
#define se second
#define pii pair<int,int>
typedef long long ll;
const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const ll INF=0x3f3f3f3f3f3f3f3f;
using namespace std;
int n;
char s[maxn];
char t[10],ans[10];
int pre[10];
int main(){
int _;scanf("%d",&_);
while(_--){
ll rev=-1;
scanf("%s",s+1);
n=strlen(s+1);
t[1]='A',t[2]='N',t[3]='O',t[4]='T';
do{
map<char,int> mp;
for(int i=1;i<=4;i++){
pre[i]=0;
mp[t[i]]=i;
}
ll temp=0;
for(int i=1;i<=n;i++){
temp+=pre[mp[s[i]]+1];
for(int j=1;j<=mp[s[i]];j++){
pre[j]++;
}
}
if(temp>rev){
rev=temp;
for(int i=1;i<=4;i++){
ans[i]=t[i];
}
}
}while(next_permutation(t+1,t+1+4));
for(int i=1;i<=4;i++){
for(int j=1;j<=n;j++){
if(s[j]==ans[i]){
printf("%c",ans[i]);
}
}
}
printf("
");
}
return 0;
}