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。
所以只要不两两相等,则先手必胜。
那么是不是一定可以通过拆分数目最大的堆,使得结果两两相等呢?答案是肯定的。证明很简单,就不赘述了···
题解:在一般的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;}
- poj 1740 A New Stone Game( 博弈)
- poj 1740 A New Stone Game(博弈)
- poj 1740 A New Stone Game(博弈)
- poj 1740 A New Stone Game 博弈
- POJ 1740 A New Stone Game【博弈】
- POJ 1740 A New Stone Game(博弈)
- POJ 1740 A New Stone Game (博弈)
- poj 1740 A New Stone Game(博弈)
- POJ 题目1740 A New Stone Game(博弈)
- 博弈 POJ A New Stone Game
- POJ 1740 A New Stone Game 博弈,规律
- [POJ](1740)A New Stone Game --找规律博弈(博弈)
- A New Stone Game(博弈)
- poj1740 A New Stone Game(博弈)
- [POJ1740]A New Stone Game(博弈)
- pku 1740 A New Stone Game(博弈,感性)
- POJ 1740 A New Stone Game
- POJ 1740 A New Stone Game
- 利用PDB文件获取未导出全局变量、函数等信息
- http://projecteuler.net/problem=12 [Answer:76576500]
- 山寨OBJECT_TYPE隐藏技术的检测方法
- 资治通鉴,卷六十八,曹操的智慧
- 最近生活
- POJ 1740 A New Stone Game (博弈)
- C#运算符之异或运算
- 十年学会编程
- 最近学习计划
- 社会网络分析重要库简介
- 使用NPOI导入导出标准Excel
- 【转载】刘未鹏---我在南大的七年
- 笔记本(通过网线)共享给台式机上网
- 资治通鉴,卷六十八,曹操被禁锢的灵魂