codeforces赛后补题求助
  • 板块学术版
  • 楼主北京
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/4/11 01:09
  • 上次更新2023/11/5 00:43:23
查看原帖
codeforces赛后补题求助
322285
北京楼主2021/4/11 01:09

Codeforces Round #713 (Div. 3)刚结束,蒟蒻想来补题(为什么我还是停留在Div. 3的水平

然而t3总是WA掉第一个点???(提交记录)找了很久也不知道错在哪里,求助大佬

下面是代码:

//C. A-B Palindrome
#include<bits/stdc++.h>
using namespace std;
char t[2*100000+10];
int main()
{
	int tt;
	cin>>tt;
	for(int z=1;z<=tt;++z)
	{
		bool no_answer=0;
		int a,b,len,cnta=0,cntb=0;
		cin>>a>>b;
		len=a+b;
		for(int i=1;i<=len;++i)
			cin>>t[i];
		if(a%2&&b%2){cout<<-1<<endl;continue;}
		
		for(int i=1;i<=len;++i)//判断是否无解 
		{
			if(t[i]=='?')t[i]=t[len-i+1];
			else if(t[i]!=t[len-i+1]){no_answer=1;break;}
		}
		if(no_answer){cout<<-1<<endl;continue;}
		for(int i=1;i<=len;++i)
		{
			if(t[i]=='0')++cnta;
			if(t[i]=='1')++cntb;
		}
		if(cnta>a||cntb>b){cout<<-1<<endl;continue;}
		
		int aa=a-cnta,bb=b-cntb;
		if(len%2&&a%2&&t[(a+b+1)/2]=='?')t[(a+b+1)/2]='0',--aa;
		if(len%2&&b%2&&t[(a+b+1)/2]=='?')t[(a+b+1)/2]='1',--bb;
		for(int i=1;i<=len/2;++i)
		{
			if(t[i]=='?'&&aa)t[i]=t[len-i+1]='0',aa-=2;
			else if(t[i]=='?')t[i]=t[len-i+1]='1',bb-=2;
		}
		
		for(int i=1;i<=len;++i)
			cout<<t[i];
		cout<<endl;
	}
	return 0;
}

感谢大佬指教!

2021/4/11 01:09
加载中...