zoukankan      html  css  js  c++  java
  • CodeForces-1215D Ticket Game 博弈,思维

    CodeForces-1215D Ticket Game 博弈,思维

    题意

    给定一个长度为偶数的字符串,由数字和('?')组成。

    两人开始轮流对('?') 填数字,先手希望左边的和和右边的和最终不相等,后手希望相等。

    问谁必胜

    分析

    显然从条件可以看出来这题的结果应该和每边的初始大小以及每边的初始问号个数有关。

    如果左边问号个数等于右边问号个数,仅当左边的和等于右边和相等才会后手赢,否则先手赢。

    再考虑一般情况,首先可以推理出左右的括号是可以抵消的,因为先手为了破坏平衡,总会在初始大的一边加9,而后手能做的也只是在另一边加9减小破坏。

    所以最终可以归结为一边为问号的情况,那么就简单了。

    后手能做的就是维持两者的和为9,所以如果(del / 2 cdot 9 = sum) ,就表明可以维持

    代码

    char s[200005];
    int cnt1, cnt2;
    int sum1, sum2;
    
    int main() {
        int n = readint();
        scanf("%s", s);
        int len = strlen(s);
        for (int i = 0; i < len; i++)
            if (i < len / 2)
                if (s[i] == '?') cnt1++;
                else sum1 += s[i] - '0';
            else {
                if (s[i] == '?') cnt2++;
                else sum2 += s[i] - '0';
            }
        if (cnt1 == cnt2) {
            if (sum1 == sum2) puts("Bicarp");
            else puts("Monocarp");
        }
        else {
            if (sum1 > sum2) {
                int del = cnt2 - cnt1;
                if (del / 2 * 9 == sum1 - sum2) puts("Bicarp");
                else puts("Monocarp");
            }
            else {
                int del = cnt1 - cnt2;
                if (del / 2 * 9 == sum2 - sum1) puts("Bicarp");
                else puts("Monocarp");
            }
        }
    }
    
  • 相关阅读:
    JS 中 console 的用法
    C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)
    C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo
    MEF框架使用总结
    webfunny前端监控开源项目
    我从Vue源码中学到的一些JS编程技巧
    nodejs 发送邮件demo
    从零开始手写Promise
    概率论要点
    行列式技巧
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13614815.html
Copyright © 2011-2022 走看看