zoukankan      html  css  js  c++  java
  • CodeForces-1383B GameGame 思维,规律,博弈

    CodeForces-1383B GameGame 思维,规律,博弈

    题意

    给定一个长度为(n) 的数组(a) ,两人轮流取数,取完后移除。

    最终谁的异或和大谁就赢,若是平局则输出"DRAW"

    分析

    比较先入为主的思想就是一定要取最高位,最高位一旦确定为1了后面就不用比了。

    (x) 为当前最高位为(1) 的数的个数,若(x) 为偶数,显然这一位的最终结果是(0) ,接下去比较下一位

    (x) 是奇数,是否就一定先手必胜呢?

    其实未必,有已下结论

    • (x quad mod quad 4 = 3)
      • 若 $y quad mod quad 2 = 0 $ ,后手必胜,先手不管取什么,后手只需要模仿先手的策略,就能最终得到奇数个(1)
      • 若 $y quad mod quad 2 = 1 $ ,先手必胜,先手只需取一个(0) ,就可以把局面转化成上一个局面
    • (x quad mod quad 4 = 1) 先手必胜,先手只需取一个(1) ,由于剩下的(1)(4) 的倍数,先手只需模仿后手的策略即可

    代码

    int a[100005];
    
    int main() {
        int T = readint();
        while (T--) {
            int x = 0;
            int n = readint();
            for (int i = 0; i < n; i++) a[i] = readint(), x ^= a[i];
            if (!x) {
                puts("DRAW");
                continue;
            }
            for(int k = 30;k >= 0;k--)
                if (x >> k & 1) {
                    vector<int> f(2);
                    for (int i = 0; i < n; i++) f[a[i] >> k & 1]++;
                    if (f[1] % 4 == 3 && f[0] % 2 == 0) puts("LOSE");
                    else puts("WIN");
                    break;
                }
        }
    }
    
  • 相关阅读:
    vue-cli构建项目 npm run build后应该怎么运行在本地查看效果
    解析JSON数组
    Lambda
    keytool不是内部或外部命令
    XML布局
    HTML5本地存储IndexedDB基础使用
    Vue 2.0基础
    cs231n__3. LostFunction
    cs231n__2. K-nearest Neighbors
    week_Last
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13620114.html
Copyright © 2011-2022 走看看