Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
188558740 Дорешивание:
DaiRuiChen007
1493C - 19 C++14 (GCC 6-32) Полное решение 1060 мс 684 КБ 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;
}
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования