Codeforce---C--penalty

这篇博客主要讨论了在裁判不知情的情况下,如何通过算法判断棋局是否出现压倒性胜利。作者提出了一个思路,即在处理问号棋子时,分别假设两方获胜,并将问号分配给胜者,以确保某方能取得压倒性优势。通过这种方式,可以有效地结束对局。代码实现中,使用了pair存储棋盘状态,并检查每步棋后的胜负可能性,当满足压倒性胜利条件时结束判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目如下: 

 

 

 分析:很关键的一句话就是:裁判是不知道预测结果的,所以,对于裁判的评测,必须要压倒性获胜才能结束对局。

接下来,讲解一下我的思路,首先,在没有问号的情况下,是很好判断对局的,那么,问号该怎么处理呢?,我先用pair分开储存1与?,接下来就是最关键的,假设当前局结束,一定说明某一方是压倒性胜利的,不妨假设A赢或B赢都判断一次,然后如果A赢,那么把A的问号都置为1,如果B赢,把B的问号都置为1,A的置为0,这样的好处是能使得某方获得压倒性胜利。

#include<iostream>
#include<cmath>
using namespace std;
string s;
int t;
pair<int ,int >aq1,aq2; 
int main()
{
	int ans,len=10; 
	
	cin>>t;
while(t--)
	{
		int target1=0,target2=0;
		ans=0;
		aq1.first=0;
		aq2.first=0;
		aq1.second=0;
		aq2.second=0;
		
		cin>>s;
		for(int i=1;i<=10;i++)
		{
			ans++;
		
		if(i%2==0) target2++;
		else target1++;
			if(s[i-1]=='1') 
			{
				if(i%2==0) aq2.first++;
				else  aq1.first++;
			}
			else if(s[i-1]=='?')
			{
					if(i%2==0) aq2.second++;
				else  aq1.second++;
				
			 } 
			
			if(i%2==0){
			
			if((aq1.first+aq1.second-aq2.first)>(5-target2))break;
			else if(abs(aq2.second+aq2 .first-aq1.first)>(5-target1)) break;
			}
			
			else
			{
				if((aq1.first+aq1.second-aq2.first)>(5-target2))
				{
				
					break;
				}
				else if((aq2.second+aq2.first-aq1.first)>(5-target1))
				{
					break;
				 } 
			}
		}
		
	cout<<ans<<endl;	
		
	}
	
	return 0;
 } 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值