poj 2975
来源:互联网 发布:珠宝设计软件下载 编辑:程序博客网 时间:2024/06/05 08:40
题目概述:
尼姆游戏,最后一次取的获胜
有N堆,每堆有num个,每次从一堆中取至少一个
输入:
第一行N,下一行N个数,为num,数据有多组,以N=0为止(不处理)
限制:
1<=N<=1000;1<=num<=1e9
输出:
每行一个整数,首次取时可由s态转到t态的取法种数,如果取前已经是t态则种数为0
多组输出之间没有空行
样例输入:
3
7 11 13
2
1000000000 1000000000
0
样例输出:
3
0
讨论:
用所有堆异或后的结果去异或单一堆即是按必胜取法取后该堆剩余数,因此如果大于等于原有的则对该堆不存在必胜取法
题解状态:
168K,32MS,C++,557B
#include<algorithm>#include<string.h>using namespace std;#define INF 0x3f3f3f3f#define maxx(a,b) ((a)>(b)?(a):(b))#define minn(a,b) ((a)<(b)?(a):(b))#define MAXN 1007int nums[MAXN];inline int fun(int N){int ans = 0;for (int p = 0; p < N; p++) {scanf("%d", &nums[p]);//inputans ^= nums[p];//顺手异或一番}int cnt = 0;while (N--)if ((ans^nums[N]) < nums[N])//左侧异或的结果是遵从必胜取法后该堆剩余数量,如果大于等于原有数量显然是不可能的cnt++;return cnt;}int main(void){//freopen("vs_cin.txt", "r", stdin);//freopen("vs_cout.txt", "w", stdout);int N;while (~scanf("%d", &N) && N)//inputprintf("%d\n", fun(N));//output}
EOF
0 0
- poj 2975
- 【POJ】2975
- POJ-2975-Nim
- poj 2975 Nim 水
- POJ 2975 Nim
- POJ Nim (2975)
- poj 2975 Nim
- POJ 2975:Caesar 密码
- POJ 2975 Nim题解
- 【POJ 2975】 Nim 博弈论
- poj 2975 Nim
- poj 2975 Nim(博弈)
- poj 2975 NIM
- POJ 2975 Nim 题解
- POJ
- poj
- POJ
- POJ
- Spring 源码分析
- ios拼图游戏(四)之触摸交换拼图
- 集合
- Unity3D在Project中添加Favorites快速搜索标签
- 深入理解Java内存模型——volatile
- poj 2975
- Dinic算法的原理与构造(转)
- HDU 5676 ztr loves lucky numbers【DFS】
- 嵌入式linux内核制作
- 【数据结构】二叉树遍历
- POJ 2251 Dungeon Master 搜索入门题
- 当自己迷茫的时候要知道怎样去做
- Andoird Studio 字体、主题简单设置
- I00008 百鸡问题