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
    ");
    }
  • 相关阅读:
    ExecuteScalar 返回值问题
    c#中怎么用for循环遍历DataTable中的数据
    select多用户之间通信
    python快速学习6
    python快速学习5
    python快速学习4
    python快速学习3
    python快速学习2
    arm处理器
    软链接与硬链接
  • 原文地址:https://www.cnblogs.com/linruier/p/9513851.html
Copyright © 2011-2022 走看看