【普及二】【平衡后缀】

#include<bits/stdc++.h>
using namespace std;
int t,n,k,p[30],ma,mi;
char s[100010];
char chmin,chmax;
void get()
{
	ma=0;mi=0x3f3f3f3f;
	for(int i=1;i<=n;i++)
	{
		if(p[s[i]-'a'+1]>ma)
		{
			ma=p[s[i]-'a'+1];
		}
		if(p[s[i]-'a'+1]<mi)
		{
			mi=p[s[i]-'a'+1];
		}
	}
}
int main()
{
	cin>>t;
	for(int ii=1;ii<=t;ii++)
	{
		cin>>n>>k;mi=0x3f3f3f3f,ma=0;
		memset(p,0,sizeof p);
		for(int i=1;i<=n;i++)
		{
			cin>>s[i];
			p[s[i]-'a'+1]++;
		}
		get();
		if(ma-mi>k)
		{
			cout<<-1<<endl;
			continue;
		}
		for(int i=1;i<=n;i++)
		{
			for(int j='a';j<='z';j++)
			{
				if(p[j-'a'+1]>0)
				{
					p[j-'a'+1]--;
					get();
					if(ma-mi>k)
					{
						p[j-'a'+1]++;
						get();
						continue;
					}
					s[i]=char(j);
					break;
				} 
			}
		} 
		for(int i=1;i<=n;i++)
		{
			cout<<s[i];
		}
		cout<<endl;
	}
	return 0;
}

时间超限 0 看看有么有优化

4 个赞

可以看一下该帖子

2 个赞

https://discourse.xinyoudui.com/t/topic/13616

2 个赞