题目大意

洛谷链接

给出一个长度为\(n\)的由数字组成的字符串(\(n\)是偶数)。但可能有偶数个位上的数字为?

现在有两个人\(A\)和\(B\),在?的位置上填\(0\)~\(9\)的数,一直到填完。

让\(A\)先手,若最后该字符串的左半边数字和等于右半边数字和 ,则\(B\)胜利,否则\(A\)胜利。

样例输入

8

?054??0?

样例输出

Bicarp

PS:更多样例和数据范围请打开原题链接吧,实在懒得粘了orz

思路

简单分情况讨论一下就可了。

设左半部分数字和为\(x\),?的个数为\(a\);右半部分数字和为\(y\),?的个数为\(b\)。

  • 若\(x=y\):

    • 若\(a\not= b\),例如100??919????,\(A\)总能操作让最后不相等。因此这种情况\(A\)必胜。
    • 若\(a=b\),例如1??919??,\(A\)填什么\(B\)就填什么就行了,因此这种情况\(B\)必胜。
  • 若\(x\not= y\),可设\(x>y\):
    • 若\(a\ge b\),例如??9??111??,\(A\)可以直接一直在左半部分放9,这样右半部分永远也不可能和左半部分相等。因此这种情况\(A\)必胜。
    • 若\(a<b\),例如?054??0?,前\(a\)个回合肯定是\(A\)一直在左半部分放9,\(B\)则维持平衡,则变成了90549?0?。此时两边的差为9,则\(A\)放任意一个数,\(B\)放另外一个相加得9的就可以了,例如90549801。但是比如?053??0?或者?055??0?,此时的\(x-y\)并不是9的倍数,分别可以改为9053990?9055900?,\(B\)就GG了。这就类似一个取石子问题,如果\(x-y\)是9的先手的步数倍(刚好可以补齐足够的9,当然\(x-y\)太大也不行),并且\(b-a\)是偶数(保证前\(a\)个回合后\(B\)先开始),那么就\(B\)赢,否则就是\(A\)赢。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
const char PlayerA[10]={"Monocarp"};
const char PlayerB[10]={"Bicarp"};
int n;
char s[maxn];
int x,y,a,b; int main(){
scanf("%d",&n);
scanf("%s",s+1);//个人习惯从1开始,当然也可以从0开始(的异世界生活) for(int i=1; i<=n/2; i++){
if(s[i]=='?')a++;
else x+=s[i]-'0';
} for(int i=n/2+1; i<=n; i++){
if(s[i]=='?')b++;
else y+=s[i]-'0';
} if(x<y){//如果是小于直接调换一下左右就行了
swap(x,y);
swap(a,b);
} if(x==y)
puts(a==b ? PlayerB : PlayerA);
else{
if(a>=b)puts(PlayerA);
else puts(((b-a)%2==0&&x-y==(b-a)/2*9) ? PlayerB : PlayerA);
}
return 0;
}

补充

取石子问题介绍(链接来自网络博客)

【博弈论】CF 1215D Ticket Game的更多相关文章

  1. Codeforces 1215D Ticket Game 题解

    Codeforces 1215D Ticket Game 原题 题目 Monocarp and Bicarp live in Berland, where every bus ticket consi ...

  2. Codeforces 1215D. Ticket Game

    传送门 博弈,发现情况有点多,分析一下把有用的状态提取出来 显然各个位置的数字是没用的,我们只要知道两边的数字和分别是多少 并且状态显然和左右两边的 "?" 数量有关 因为最终我们 ...

  3. CF 938D Buy a Ticket 题解

    题目 Musicians of a popular band "Flayer" have announced that they are going to "make t ...

  4. Ticket Game CodeForces - 1215D 博弈题

    题目描述 Monocarp and Bicarp live in Berland, where every bus ticket consists of n digits (n is an even ...

  5. JZYZOJ 2002 [cf] 石江豪pk李震 博弈论 sg函数

    http://172.20.6.3/Problem_Show.asp?id=2002 https://blog.csdn.net/qq_24451605/article/details/5015497 ...

  6. cf#512 C. Vasya and Golden Ticket

    题目链接 http://codeforces.com/contest/1058/problem/C 这题还是暴力最方便,和的情况最多有n*a[i]  900种把每种都试一遍 #include<b ...

  7. CF 256C Furlo and Rublo and Game【博弈论,SG函数】

    暴力的求SG函数会超时,正解是先处理出10^6以内的SG值,对于更大的,开根号之后计算出. 小数据观察可以发现sg函数值成段出现,而且增长速度很快,因此可以计算出来每一段的范围,只需打表即可. Nim ...

  8. CF 39E. What Has Dirichlet Got to Do with That?(记忆化搜索+博弈论)

    传送门 解题思路 首先很好写出一个\(O(ab)\)的记搜,但发现这样无法处理\(a=1\)和\(b=1\)的情况,这两种情况需要特判.首先\(a=1\)的情况,就是如果当前选手让\(a+1\)必胜, ...

  9. 【最短路】CF 938D Buy a Ticket

    题目大意 流行乐队"Flayer"将在\(n\)个城市开演唱会,这\(n\)个城市的人都想去听演唱会,每个城市的票价不同,于是这些人就想是否能去其他城市听演唱会更便宜,但是去其他的 ...

随机推荐

  1. 白嫖党看番神器 AnimeSeacher

    - Anime Searcher - 简介 通过整合第三方网站的视频和弹幕资源, 给白嫖党提供最舒适的看番体验~ 目前有 4 个资源搜索引擎和 2 个弹幕搜索引擎, 资源丰富, 更新超快, 不用下载, ...

  2. SpringBoot+Shiro+JPA+LayUI的后台管理系统

    一.系统说明 资源下载路径:https://download.csdn.net/download/qq_37171817/12056804 本系统是一个用SpringBoot做后台开发框架,Shiro ...

  3. git仓库下拉和上传

    git仓库比较方便,可以实现白天在公司写的代码,下班之前上传到git仓库,晚上在另一台电脑上直接下拉下来,其实感觉和开发用的svn差不多 在另一篇博客里面写到,需要先在git里面新增好仓库和成员之后, ...

  4. MySQL的事务机制和锁(InnoDB引擎、MVCC多版本并发控制技术)

    一.事务(数据库的事务都通用的定义) 1.1 事务定义 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.事务通常以 BEGIN TRANSACTION 开始 ...

  5. sql中的join

    首先准备数据 有以下数据,三张表:role(角色表).hero(英雄表).skill(技能表),我们以英雄联盟的数据做示例 一个hero对应一个role(我们这里暂定) 一个role可以对应多个her ...

  6. maximo入门----用户使用提要

    其实七月初就知道自己要做maximo了,但是那个时候

  7. 两年银行经验的阿里、头条社招面经分享(已拿offer)

    lz是非科班自学的java,毕业后进入卡中心,现在是2年开发经验.20年年初先后面了头条.拼多多和阿里(淘宝和支付宝),并成功拿到阿里和头条两家的offer.   面试前我主要是在牛客网看大家的面经进 ...

  8. canvas的简单绘制及设置

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> ...

  9. spring的初认识

    spring的理解 1.spring是一个开源的免费框架(容器) 2.spring是一个轻量级的,非入侵式的框架 3.支持事务的处理,对框架的整合的支持 4.控制反转(ioc)和面向切口编程(aop) ...

  10. phpStudy8.1.0.1配置子域名多网站

    版本 这里phpStudy版本为8.1.0.1: 步骤 假设域名为:domain.com:公网IP地址为:42.33.33.33 首先云解析中配置,添加子域名A记录直接指向你的公网IP: ep.dom ...