【无标题】cf 1512c 代码很长,因为涉及的内容很基本

CodeForces 1512C

 

 

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
	int n, i;
	cin>>n;
	for(i=0;i<n;i++)
	{
		int a, b, c, j, k, p, q, its, ims, d;
		cin>>a>>b;
		its=a;
		ims=b;
		char num[a+b+6];
		getchar();
		gets(num); 
		p=0;
		d=0;
		if(a%2!=0&&b%2!=0)
		{
			cout<<"-1"<<endl;
			d=1;
		}	
		else 
		{
			for(j=0;j<(a+b)/2;j++)
			{
				if(num[j]=='?')
					num[j]=num[a+b-j-1];
				else if(num[a+b-j-1]=='?')
					num[a+b-j-1]=num[j];
				else if(num[j]!=num[a+b-j-1])
				{
					p=1;
					break;
				}
					
			}
		}
		for(j=0;j<a+b;j++)
		{
			if(num[j]=='0')
				its--;
			if(num[j]=='1')
				ims--;
		}
	if(d==0)
	{
		if(its<0||ims<0)
		 cout<<"-1"<<endl;
		else if(p==1)
			cout<<"-1"<<endl;
		else
		{
			int t,kl;
			kl=0;
			t=(a+b)/2;
			if(a%2!=0)
			{
				if(num[t]=='?')
					its--;
				if(num[t]=='1')
				{
					cout<<"-1"<<endl;
					kl=1;
				}
				else
					num[t]='0';	
			}
			else if(b%2!=0)
			{
				if(num[t]=='?')
					ims--;
				if(num[t]=='0')
				{
					cout<<"-1"<<endl;
					kl=1;
				}	
				else
					num[t]='1';		
			}
			if(kl==0)
			{
			for(j=0;j<(a+b)/2;j++)
			{
				if(num[j]=='?'&&its>0)
				{
				num[j]='0';
				num[a+b-j-1]='0';
				its-=2;	
				}
				else if(num[j]=='?'&&ims>0)
				{
				num[j]='1';
				num[a+b-j-1]='1';
				ims-=2;	
				}	
			}
			puts(num);	
			}
			
		}
	}
}
	return 0;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值