General
 
 
# 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
→ Source
// 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;
}
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details