POJ2975(nim输出走法总数)
2013-07-23 22:37
274 查看
题目:题目链接
题目的意思就是普通的nim博弈,不同的是要你求出先手在胜利的时候第一步可以移动的方法数,如果输了直接输出0;
分析:因为答案最多只有n,令ans=a1^a2^…^an,如果需要构造出异或值为0的数,而且由于只能操作一堆石子,所以对于某堆石子ai,现在对于ans^ai,就是除了ai以外其他的石子的异或值,如果ans^ai<=ai,那么对于ai的话,是可以减小到ans^ai的值,然后使得所有数的异或值为0,也即转移到了必败态。
代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
using namespace std;
int main()
{
int n;
while(scanf("%d", &n))
{
if(n==0)
break;
int sp[1100];
int sum = 0;
for(int i = 0; i < n; ++i)
{
scanf("%d", &sp[i]);
sum ^= sp[i];
}
if(sum==0)
{
printf("0\n");
continue;
}
else
{
int ans = 0;
for(int i = 0; i < n; ++i)
{
if((sum ^ sp[i]) <= sp[i])
ans++;
}
printf("%d\n", ans);
}
}
return 0;
}
努力努力...
题目的意思就是普通的nim博弈,不同的是要你求出先手在胜利的时候第一步可以移动的方法数,如果输了直接输出0;
分析:因为答案最多只有n,令ans=a1^a2^…^an,如果需要构造出异或值为0的数,而且由于只能操作一堆石子,所以对于某堆石子ai,现在对于ans^ai,就是除了ai以外其他的石子的异或值,如果ans^ai<=ai,那么对于ai的话,是可以减小到ans^ai的值,然后使得所有数的异或值为0,也即转移到了必败态。
代码:
#include <iostream>
#include <cstdio>
#include <string>
#include <string.h>
#include <map>
#include <vector>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
using namespace std;
int main()
{
int n;
while(scanf("%d", &n))
{
if(n==0)
break;
int sp[1100];
int sum = 0;
for(int i = 0; i < n; ++i)
{
scanf("%d", &sp[i]);
sum ^= sp[i];
}
if(sum==0)
{
printf("0\n");
continue;
}
else
{
int ans = 0;
for(int i = 0; i < n; ++i)
{
if((sum ^ sp[i]) <= sp[i])
ans++;
}
printf("%d\n", ans);
}
}
return 0;
}
努力努力...
相关文章推荐
- POJ2975 & ZOJ3067 Nim [基础Nim博弈]输出方法
- 【C语言】在全系1000个学生中,征集慈善捐款当总数达到10万的时候,停止捐款,统计人数,并输出平均捐款数
- 判断任一二叉树,是否为满二叉树.(输出二叉树,节点总数,二叉树深度)
- Java参考项目—输出赛车总数,并输出车手信息
- poj2975 Nim(经典博弈)
- 【Nim游戏】POJ2975[Nim]题解
- [poj2975]Nim
- poj2975 Nim 博弈
- 初探二叉树之动态创建,前.中,后序遍历的递归及非递归实现,层次遍历,树状输出,叶节点及节点总数的统计
- 【背包总结】【输出方案总数】
- ZOJ3067 POJ2975 Nim,经典NIM游戏
- 【POJ2975】Nim (博弈)
- 栈—输出栈的次序总数
- JS解决输入1-1000元,输出由1、5、10、20、50、100拼成输入的面值方法总数
- [poj2975]Nim_博弈论
- 爬楼梯问题,输出总数以及过程
- Java中利用递归实现斐波纳斯数列的兔子问题,动态输出兔子的总数
- 《挑战程序设计竞赛》4.2.2 游戏必胜策略-Nim与Grundy数 POJ2975 1704 2311 3537 2315 CF138D(2)
- POJ2975(Nim博弈)
- 给定入栈序列1、2、3、4、5,输出所有的出栈序列和总数