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");
            }
        }
    }
    
  • 相关阅读:
    Intent flag 与启动模式的对应关系
    Activity的启动模式---总结
    NDK---使用,开发步骤
    自定义ViewGroup
    android:process结合activity启动模式的一次实践
    Java单元测试之覆盖率统计eclemma
    Java单元测试之JUnit篇
    结对编程1
    个人作业1——四则运算题目生成程序(基于控制台)
    Coding使用方法
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13614815.html
Copyright © 2011-2022 走看看