普及二第二题 ID9737求助

#include<bits/stdc++.h>
using namespace std;
int ttt,n,k,t[27];
bool v[27];
string s,ans;
bool c()
{
	int mx = -1,mn = 1e9;
	for (int i=0;i<26;i++)
	{
		if (v[i])
		{
			mx = max(mx,t[i]);
			mn = min(mn,t[i]);
		}
	}
	return mx - mn <= k;
}//检查函数
int main()
{
	cin >> ttt;
	while (ttt--)
	{
		cin >> n >> k >> s;
		memset(v,0,sizeof(v));
		memset(t,0,sizeof(v));
		for (int i=0;i<n;i++)
		{
			v[s[i]-'a'] = 1;
			t[s[i]-'a']++;
		}
		ans = "";
		if (!c())
		{
			cout << -1 << endl;
			continue;
		}//特判
		for (int i=0;i<n;i++)
		{
			for (int j=0;j<26;j++)
			{
				if (v[j])
				{
					t[j]--;
					if (c())
					{
						ans += 'a' + j;
						break;//下一轮
					}
					else
					{
						t[j]++;//回溯
					}
				}
			}
		}
		if (ans.size()!=s.size())
		{
			cout << -1 << endl;
		}
		else
		{
			cout << s << endl;
		}
	}
	return 0;
}
1 个赞