?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
188380881 |
Practice: DaiRuiChen007 |
1526D - 16 | C++14 (GCC 6-32) | Accepted | 373 ms | 4156 KB | 2023-01-08 07:44:17 | 2023-01-08 07:44:17 |
// LUOGU_RID: 99008589 #include<bits/stdc++.h> #define int long long #define pci pair<char,int> using namespace std; const int MAXN=1e5+1; struct BitTree { int len,tree[MAXN]; inline int lowbit(int x) { return x&-x; } inline void Modify(int x,int v) { for(;x<=len;x+=lowbit(x)) tree[x]+=v; } inline int Query(int x) { int ret=0; for(;x;x-=lowbit(x)) ret+=tree[x]; return ret; } } B; inline int dist(string ori,string tar) { int n=tar.size(),ans=0; B.len=n; ori="#"+ori,tar="#"+tar; map <char,vector <int> > lst; for(int i=1;i<=n;++i) lst[ori[i]].push_back(i); for(int i=1;i<=n;++i) B.Modify(i,1); for(int i=n;i>=1;--i) { int x=lst[tar[i]].back(); ans+=B.Query(n)-B.Query(x); B.Modify(x,-1),lst[tar[i]].pop_back(); } return ans; } inline void solve() { string str,res; int ans=0; cin>>str; map <char,int> cnt; int n=str.length(); for(int i=0;i<n;++i) ++cnt[str[i]]; vector <int> p; vector <pci> sec; for(int i=0;i<(int)cnt.size();++i) p.push_back(i); for(auto x:cnt) sec.push_back(x); do { string tmp; for(int i:p) { for(int j=1;j<=sec[i].second;++j) { tmp.push_back(sec[i].first); } } int val=dist(tmp,str); if(val>=ans) ans=val,res=tmp; } while(next_permutation(p.begin(),p.end())); cout<<res<<endl; } signed main() { int T; cin>>T; while(T--) solve(); return 0; }
?
?
?
?