POJ 1740 A New Stone Game (博弈)

来源:互联网 发布:手机接收wifi端口 编辑:程序博客网 时间:2024/05/16 14:44
题意:在一般的Nim游戏基础上,加入了一条新规则:每次都可以从所选的堆中,拿出任意个石子放到其它的任意个堆中。
题解:在一般的Nim游戏中,非平衡态->先手胜,平衡态->后手胜。对于任意两堆数量相同的石子,它们对整个局势无影响(它们的异或值等于0,或者说无论甲采取什么方案,乙都可以用对应的方案来纠正状态的变化)。
本题中,如果所有堆的数量两两相等,比如 1,1,2,2,5,5,则后手胜。
如果不成对,当堆为奇数时,比如1,2,3,4,5,则可以把5(数目最大的堆)分配给前面的堆,变成2,2,4,4。
当堆为偶数时,比如1,2,3,4,5,6,可以把6(数目最大的堆)分配给2,3,4,5,它自己变成1,从而得到1,1,3,3,5,5。
所以只要不两两相等,则先手必胜。
那么是不是一定可以通过拆分数目最大的堆,使得结果两两相等呢?答案是肯定的。证明很简单,就不赘述了···

#include<iostream>using namespace std;int main(){    int n;    while ( 1 )    {        cin >> n;        if ( n == 0 ) break;        int deg[105] = { 0 };        int cnt = 0, num;        while(n--)        {            cin >> num;            deg[num]++;        }        for ( int i = 0; i <= 100; i++ )        {            if ( deg[i]%2 ) cnt++;        }        if ( cnt )            cout << 1 << endl;        else            cout << 0 << endl;    }    return 0;}


原创粉丝点击