Ticket Game思维题

题目链接

题意:

  给你一个n的序列(n=2*k),由数字和?(偶数个)组成,A和B分别操作(B先操作):把?变成一个任意的0-9的数字,如果最后前n/2和后n/2个数字之和相等,则A胜,否则B胜。

分析:

  想一想?的作用,对于A来说就是赶快“平衡”两边,而对于B来说就是赶快让两边平衡不了。那么我们想一想B先操作会怎么办,他会把多的那边的某个?变成9(否则a会占更大优势),次时,A只能“跟风”把另一边的一个?变成9,于是一直这样下去,就还剩一边由?,此时,A和B可变的?的个数就相等了,于是每人变一个,当然,如果此时这边的和已经大了的话,那A就“凉了”,否则就计算一下能不能变成相等的,当然此时B就会判断,如果?个数*9/2就超了,那么B会很高兴的把他要变的数字都变成9,如果个数*9/2都不够,那么就B会很开心的把数字都变成0,可是如果正好是个数*9/2,那么就好了,A只需不管B怎么变就变为9-B变的数就好了,A就获胜了。

  还是比较简单的,然后我们要做的就是判断一下就好了,最后就是代码了

#include <cstdio>
#include <algorithm>
using namespace std;
int main(){
    int n;
    scanf("%d",&n);
    int suma=0,sumb=0,ha=0,hb=0;
    char js;
    for(int i=1;i<=n/2;i++){
        scanf(" %c",&js);
        if(js=='?')
            ha++;
        else
            suma+=js-'0';
    }
    for(int i=1;i<=n/2;i++){
        scanf(" %c",&js);
        if(js=='?')
            hb++;
        else
            sumb+=js-'0';
    }
    if(ha<hb){
        swap(ha,hb);
        swap(suma,sumb);
    }
    int wh=ha-hb;
    int c=sumb-suma;
    if(c<0)
        printf("Monocarp");
    else if(wh/2*9==c)
        printf("Bicarp");
    else
        printf("Monocarp");
    return 0;
} 

猜你喜欢

转载自www.cnblogs.com/wish-all-ac/p/12759962.html