zoukankan      html  css  js  c++  java
  • 51 Nod 1069 Nim游戏

    分析:

    a1 xor a2 xor a3 ... xor an !=0 则为必胜态

    a1 xor a2 xor a3 ... xor an ==0 则为必败态

    也就是说只要计算异或值,如果非零则A赢,否则B赢

    证:首先从xor为零的状态取走至少一颗石子,xor就一定会变成非零。因此,通过取石子,必败态只能转移为必胜态

    其次,对于一个必胜态而言,观察xor的二进制表示最高位的1,选取石子数的二进制表示对应位也为1的

    某堆石子。只要从中取走使得该位变为0,并且使得其余xor中的1也反转的数量的石子,xor就可以变成零。

    也就是说必胜态通过取石子一定可以选择转移到必败态。

    #include<bits/stdc++.h>
    using namespace std;
    int N,A[1005];
    int main()
    {
        scanf("%d",&N);
        for(int i=0;i<N;i++)scanf("%d",&A[i]);
        int x=0;
        for(int i=0;i<N;i++)x^=A[i];
        if(x!=0)puts("A
    ");
        else puts("B
    ");
    }
  • 相关阅读:
    计数问题
    自定义中间件
    中间件的数据流向
    模块化
    开发属于自己的包
    中间件
    java JDK环境变量配置
    uni-app 请求 uni.request封装使用
    uni-app 自定义 简单 底部tab
    vue 过滤器 filter 的使用
  • 原文地址:https://www.cnblogs.com/linruier/p/9513851.html
Copyright © 2011-2022 走看看