平衡后缀求条

:rage:

#include<bits/stdc++.h>
#define N 100005
#define M 100005
#define int long long
using namespace std;
int n,k,mai,mii,f;
string s; 
char mac=0,mic=0;
map<char,int>tc;
int checkmax(int sl)
{
	mac=0;
	for(int i=0;i<sl;i++)
	{
		if(mai<=tc[s[i]])
		{
			mac=s[i];
			mai=tc[s[i]];
		}
	}
	return mai;
}
int checkmin(int sl)
{
	mic=0;
	for(int i=0;i<sl;i++)
	{
		if(mii<=tc[s[i]])
		{
			mic=s[i];
			mii=tc[s[i]];
		}
	}
	return mii;
}
signed main()
{
	cin>>n>>k>>s;
	int l=s.size();
	for(int i=0;i<l;i++)
	{
		tc[s[i]]++;
	}
	for(int i=0;i<l;i++)
	{
		f=0;
		for(int j=0;j<26;j++)
		{
			if(tc[s[i]]!=0)
			{
				tc[s[i]]--;
				if(checkmax(l)-checkmin(l)<=k)
				{
					s[i]=j+'a';
					f=1;
					break;
				}
			}	
			if(f==0){cout<<-1<<endl;break;}
		}
		if(f==0)break;
	}
	if(f==1)cout<<s<<endl;
  return 0;
}


暂时写了一个样例的代码~

2 个赞

参考一下

3 个赞

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

3 个赞
在此处键入或粘贴代码

for(int i=0;i<s.size();i++){
vis[s[i]-‘a’]=1;
m[s[i]-‘a’]++;
p=max(p,m[s[i]-‘a’]);
}满足vis[i]&&p-m[i]>k -1
if(f){
for(int i=0;i<s.size();i++)
for(int j=0;j<26;j++)
if(m[j]){
int mx=0,mi=2e9;
m[j]–;
for(int k=0;k<26;k++)if(vis[k])mx=max(mx,m[k]),mi=min(mi,m[k]);
if(mx-mi>k)m[j]++;
else{
输出
break;
}
}
}

3 个赞
在此处键入或粘贴代码
for(int i=0;i<s.size();i++){
    vis[s[i]-‘a’]=1;
    m[s[i]-‘a’]++;
    p=max(p,m[s[i]-‘a’]);
}满足vis[i]&&p-m[i]>k -1
if(f){
for(int i=0;i<s.size();i++)
    for(int j=0;j<26;j++)
        if(m[j]){
        int mx=0,mi=2e9;
        m[j]–;
        for(int k=0;k<26;k++)if(vis[k])mx=max(mx,m[k]),mi=min(mi,m[k]);
        if(mx-mi>k)m[j]++;
        else{
            输出
            break;
        }
    }
}```
2 个赞

谢谢~

2 个赞

给个解决方案 :smiling_face_with_three_hearts:

3 个赞

ok~

2 个赞

不对,我现在操作的是旧号 :rofl:

2 个赞

现在是新号了