【博弈论】CF 1215D Ticket Game
题目大意
洛谷链接
给出一个长度为\(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\)必胜。
- 若\(a\not= 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\)赢。
- 若\(a\ge b\),例如
代码
#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的更多相关文章
- Codeforces 1215D Ticket Game 题解
Codeforces 1215D Ticket Game 原题 题目 Monocarp and Bicarp live in Berland, where every bus ticket consi ...
- Codeforces 1215D. Ticket Game
传送门 博弈,发现情况有点多,分析一下把有用的状态提取出来 显然各个位置的数字是没用的,我们只要知道两边的数字和分别是多少 并且状态显然和左右两边的 "?" 数量有关 因为最终我们 ...
- CF 938D Buy a Ticket 题解
题目 Musicians of a popular band "Flayer" have announced that they are going to "make t ...
- Ticket Game CodeForces - 1215D 博弈题
题目描述 Monocarp and Bicarp live in Berland, where every bus ticket consists of n digits (n is an even ...
- JZYZOJ 2002 [cf] 石江豪pk李震 博弈论 sg函数
http://172.20.6.3/Problem_Show.asp?id=2002 https://blog.csdn.net/qq_24451605/article/details/5015497 ...
- cf#512 C. Vasya and Golden Ticket
题目链接 http://codeforces.com/contest/1058/problem/C 这题还是暴力最方便,和的情况最多有n*a[i] 900种把每种都试一遍 #include<b ...
- CF 256C Furlo and Rublo and Game【博弈论,SG函数】
暴力的求SG函数会超时,正解是先处理出10^6以内的SG值,对于更大的,开根号之后计算出. 小数据观察可以发现sg函数值成段出现,而且增长速度很快,因此可以计算出来每一段的范围,只需打表即可. Nim ...
- CF 39E. What Has Dirichlet Got to Do with That?(记忆化搜索+博弈论)
传送门 解题思路 首先很好写出一个\(O(ab)\)的记搜,但发现这样无法处理\(a=1\)和\(b=1\)的情况,这两种情况需要特判.首先\(a=1\)的情况,就是如果当前选手让\(a+1\)必胜, ...
- 【最短路】CF 938D Buy a Ticket
题目大意 流行乐队"Flayer"将在\(n\)个城市开演唱会,这\(n\)个城市的人都想去听演唱会,每个城市的票价不同,于是这些人就想是否能去其他城市听演唱会更便宜,但是去其他的 ...
随机推荐
- 白嫖党看番神器 AnimeSeacher
- Anime Searcher - 简介 通过整合第三方网站的视频和弹幕资源, 给白嫖党提供最舒适的看番体验~ 目前有 4 个资源搜索引擎和 2 个弹幕搜索引擎, 资源丰富, 更新超快, 不用下载, ...
- SpringBoot+Shiro+JPA+LayUI的后台管理系统
一.系统说明 资源下载路径:https://download.csdn.net/download/qq_37171817/12056804 本系统是一个用SpringBoot做后台开发框架,Shiro ...
- git仓库下拉和上传
git仓库比较方便,可以实现白天在公司写的代码,下班之前上传到git仓库,晚上在另一台电脑上直接下拉下来,其实感觉和开发用的svn差不多 在另一篇博客里面写到,需要先在git里面新增好仓库和成员之后, ...
- MySQL的事务机制和锁(InnoDB引擎、MVCC多版本并发控制技术)
一.事务(数据库的事务都通用的定义) 1.1 事务定义 事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.事务通常以 BEGIN TRANSACTION 开始 ...
- sql中的join
首先准备数据 有以下数据,三张表:role(角色表).hero(英雄表).skill(技能表),我们以英雄联盟的数据做示例 一个hero对应一个role(我们这里暂定) 一个role可以对应多个her ...
- maximo入门----用户使用提要
其实七月初就知道自己要做maximo了,但是那个时候
- 两年银行经验的阿里、头条社招面经分享(已拿offer)
lz是非科班自学的java,毕业后进入卡中心,现在是2年开发经验.20年年初先后面了头条.拼多多和阿里(淘宝和支付宝),并成功拿到阿里和头条两家的offer. 面试前我主要是在牛客网看大家的面经进 ...
- canvas的简单绘制及设置
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> ...
- spring的初认识
spring的理解 1.spring是一个开源的免费框架(容器) 2.spring是一个轻量级的,非入侵式的框架 3.支持事务的处理,对框架的整合的支持 4.控制反转(ioc)和面向切口编程(aop) ...
- phpStudy8.1.0.1配置子域名多网站
版本 这里phpStudy版本为8.1.0.1: 步骤 假设域名为:domain.com:公网IP地址为:42.33.33.33 首先云解析中配置,添加子域名A记录直接指向你的公网IP: ep.dom ...