题目

传送门:https://www.luogu.com.cn/problem/CF1215D

Idea

一列数,保证能分成左右两部分,其中有若干个数字被抹掉,两个人轮流填数,如果在把这些空缺的数字填好后左右两部分的数之和相同,则B(后手)赢,否则A(先手)赢。

我们来简单思考一下:

首先如果初始时左右两部分的已有值就是相同的,那只有左右两边空缺的个数相同,B才能赢

如果初始值不同的话,由于两人所能做出的操作都是可以抵消掉的,最后肯定会把左右两边空缺个数较少的那一位先消耗完(肯定是A破坏,B还原,最后某一方消耗完后左右差值依然是初始时的左右差值),然后所有的空缺都集中到左或右其中一方里。

接下来的情况就是在剩下的一方里(假设此时还剩n个空缺),还是A先手,两方每次选择一个0~9之间的数,如果最后选择数的和等于初始左右差值,B赢,否则A赢

这就转换为一个经典博弈问题了,只要(n÷2)×9==差值,B赢,否则A赢。

想想为什么,因为先手的A可以选择0~9的任意一个数,后手的B只可以控制他和A选择的数的总和是9,故如果轮数(两人各填一次算一轮)乘9(B能控制每轮增长的数字和为9)和差值相等,B就赢,否则A就赢。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=2000000;
char s[maxn];
ll lsum=0,rsum=0,lcnt,rcnt;
bool Check(int a,int b,int l,int r){
int res=a-b;
int sum=(l-r)/2;
if(sum*9==res) return 1;
return 0;
}
int main(){
ios::sync_with_stdio(0);
int len;
cin>>len;
cin>>s;
for(int i=0;i<len/2;i++){
if(s[i]!='?') lsum+=s[i]-'0';
else lcnt++;
}
for(int i=len/2;i<len;i++){
if(s[i]!='?') rsum+=s[i]-'0';
else rcnt++;
}
if(lsum==rsum){
if(lcnt==rcnt) cout<<"Bicarp"<<endl;
else cout<<"Monocarp"<<endl;
}
else if(lsum<rsum){
if(Check(rsum,lsum,lcnt,rcnt)) cout<<"Bicarp"<<endl;
else cout<<"Monocarp"<<endl;
}
else{
if(Check(lsum,rsum,rcnt,lcnt)) cout<<"Bicarp"<<endl;
else cout<<"Monocarp"<<endl;
}
return 0;
}

最新文章

  1. 升级xcode8之后出现报错提示,提示swift版本问题
  2. 《JavaScript语言精粹》—— 读书总结
  3. 理解会话Session
  4. myeclipse使用SVN团队开发
  5. Tcl学习之--语法|变量
  6. Week11(11月18日)
  7. api-gateway实践(04)新服务网关 - 新手入门
  8. /etc/fstab文件分析(第二版)
  9. linux yum命令 使用
  10. web services + soap + wsdl 学习
  11. net core体系-web应用程序-4net core2.0大白话带你入门-3asp.net core项目架构和配置文件解读
  12. 如何将.SQL文件的数据导入到Mysql的数据库中
  13. echarts 移动端地图数据可视化开发教程
  14. MySQL慢查询优化
  15. 数据库 Mysql内容补充二
  16. iOS - 获取状态栏和导航栏尺寸(宽度和高度)
  17. Django之模型---ORM简介
  18. java classloader怎么找class?
  19. nginx sever_name正则
  20. js中的内置对象

热门文章

  1. RPM包管理-yum在线管理
  2. Charles(青花瓷/花瓶)的基本使用
  3. 基本的bash shell 命令
  4. Spring IoC 容器的扩展
  5. iOS -UIColor随机生成颜色的方法
  6. 源码分析(1)-HashMap(JDK1.8)
  7. 我去,你竟然还不会用 Java final 关键字
  8. .net core3.1 abp动态菜单和动态权限(思路) (二)
  9. 常用sql进阶语句
  10. Docker数据管理与挂载管理