第八个点tle 求hack
查看原帖
第八个点tle 求hack
107348
学者有志楼主2022/8/8 15:39
#include<bits/stdc++.h>
using namespace std;
int T;
int n,a,e,p,q;
char ansstr[500000];
bool bb[500000];
void ans(string s,int num)
{
	while (num)
	{
		int x=-1,y=-1,bb1=0,bb2=0;
		for (int i=0;i<s.length();i++)
		{
			if (x==-1&&s[i]=='A'&&!bb[i])
				x=i,bb[i]=1,bb1=1;
			if (y==-1&&s[i]=='B'&&!bb[i])
				y=i,bb[i]=1,bb2=1;
		}
		if (bb1&&bb2)
		{
			swap(s[x],s[y]);
			num--;
		}
		else break;
	}
	for (int i=0;i<s.length();i++)
	{
		if (!num)break;
		if (!bb[i]&&s[i]=='B')
		{
			s[i]=='A';
			bb[i]=1;
		}
	}
	cout<<s<<'\n';
}
int main()
{
//	freopen("1.txt","r",stdin);
//	freopen("1.out","w",stdout);
	cin>>T;
	for (int t=1;t<=T;t++)
	{
		memset(bb,0,sizeof(bb));
		int mini=0,maxi=0;
		p=0;q=0;
		cin>>n>>a>>e;
		string s;
		cin>>s;
		for (int i=0;i<s.length();i++)
		{
			if (s[i]=='A')p++;
			else q++;
		} 
		mini=abs(a-p);
		if (p>=a)maxi=mini+2*min(q,a);
		else if(q>=a)maxi=p+a;
		else maxi=2*n+q-a;
		if (e>=mini&&e<=maxi&&(e-mini)%2==0)
		{
			int temp=a-p;
			while(temp<=-1)
			{
				for (int i=0;i<s.length();i++)
				{
					if (s[i]=='A')
					{
						s[i]='B';
						temp++;
						bb[i]=1;
						break;
					}
				}
			}
			while(temp>=1)
			{
				for (int i=0;i<s.length();i++)
				{
					if (s[i]=='B')
					{
						s[i]='A';
						temp--;
						bb[i]=1;
						break;
					}
				}
			}
			ans(s,(e-mini)/2);
		}
		else cout<<-1<<'\n';
	}
}
2022/8/8 15:39
加载中...