CF1215D Ticket Game

MonocarpBicarp生活在BerlandBerland的每一张公交车票都包含n(n是偶数)位数。

在晚上散步时,MonocarpBicarp发现了一张有某些位被擦掉而空着(擦掉的位数也是偶数)的公交车票。

Monocarp讨厌“高兴”的车票,而Bicarp则喜欢并收集它们。我们称一张车票“高兴”是说前2n​位数之和和后2n​位数之和相等。

MonocarpBicarp轮流进行操作(Monocarp先手),每次操作,当前进行操作的玩家会在一个被空着的数位填上0到9。当所有数位都被填满,游戏结束。

如果这张车票在游戏结束后“高兴”,那么Bicarp胜利;否则Monocarp胜利。如果两人都足够聪明,请你确定谁会胜出。

输入格式

第一行一个整数n,表示车票的位数。

第二行包含一个长度为n的字符串,由0到9和?组成,表示两人发现的这张车票。?表示这一位被擦去了。保证?有偶数个。注意,车票可以有前导零。

输出格式

如果Monocarp最终会胜出,输出Monocarp。否则输出Bicarp

 

题意翻译

输入输出样例

输入 #1复制

4
0523

输出 #1复制

Bicarp

输入 #2复制

2
??

输出 #2复制

Bicarp

输入 #3复制

8
?054??0?

输出 #3复制

Bicarp

输入 #4复制

6
???00?

输出 #4复制

Monocarp

说明/提示

样例一中没有任何问号,所以赢家在游戏开始前就决定了,显然就是Bicarp

在样例二中,Bicarp也会赢。在Monocarp在一个空位填上一个数之后,Bicarp可以在另一个空位填上一个一样的数,于是车票就变得“高兴”了。

#include<bits/stdc++.h>
#define int long long
#define ll long long
#define N 1000005
#define INF 0x3f3f3f3f
#define eps 1e-9
using namespace std;
char a[N];


signed main()
 {
  ios::sync_with_stdio(false);
 int n;
 cin>>n;
 cin>>a;
 int num1=0,num2=0,sum1=0,sum2=0;
 for(int i=0;i<n/2;i++)
 {
    if(a[i]=='?') num1++;
    else sum1+=a[i]-'0';
 }
 for(int i=n/2;i<n;i++)
 {
  if(a[i]=='?') num2++;
  else sum2+=a[i]-'0';
 }
 if(sum1==sum2){
  if(num1!=num2) cout<<"Monocarp"<<endl;
  else cout<<"Bicarp"<<endl;
 }
 else if(sum1<sum2)
 {
  int ans=sum2-sum1;//两边相差的数
  int num=num1-num2>>1;
  if(num*9==ans) cout<<"Bicarp"<<endl;
  else cout<<"Monocarp"<<endl;
 }
 else {
  int ans=sum1-sum2;
  int num=num2-num1>>1;
  if(num*9==ans) cout<<"Bicarp"<<endl;
  else cout<<"Monocarp"<<endl;
 }
 
 
    return 0; 
 }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值