?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
188558740 |
Practice: DaiRuiChen007 |
1493C - 19 | C++14 (GCC 6-32) | Accepted | 1060 ms | 684 KB | 2023-01-09 11:16:01 | 2023-01-09 11:16:01 |
// LUOGU_RID: 99138900 #include<bits/stdc++.h> using namespace std; int n,k; inline bool check(vector<int> cnt) { for(int i=0;i<26;++i) if(cnt[i]!=0) return false; return true; } inline string construct(vector<int> cnt,int n) { int sum=0; for(int i=0;i<26;++i) sum+=cnt[i]; if(sum>n) return "! Construction Failed"; assert((n-sum)%k==0); cnt[0]+=n-sum; string ret; for(char ch='a';ch<='z';++ch) { for(int i=1;i<=cnt[ch-'a'];++i) ret.push_back(ch); } return ret; } inline void solve() { string S; cin>>n>>k>>S; if(n%k!=0) { puts("-1"); return ; } vector <int> cnt(26); for(int i=0;i<n;++i) cnt[S[i]-'a']=(cnt[S[i]-'a']+1)%k; if(check(cnt)) { cout<<S<<"\n"; return ; } for(int i=n-1;i>=0;--i) { cnt[S[i]-'a']=(cnt[S[i]-'a']+k-1)%k; vector <int> tmp(26); for(int i=0;i<26;++i) tmp[i]=(k-cnt[i])%k; for(char ch=S[i]+1;ch<='z';++ch) { tmp[ch-'a']=(tmp[ch-'a']+k-1)%k; string ret=construct(tmp,n-i-1); if(ret=="! Construction Failed") { tmp[ch-'a']=(tmp[ch-'a']+1)%k; continue; } string T; T=S.substr(0,i)+ch+ret; cout<<T<<"\n"; return ; } } puts("-1"); } signed main() { int T; cin>>T; while(T--) solve(); return 0; }
?
?
?
?