hdu 2509 博弈 *

多堆的情况要处理好孤单堆

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 const int INF=0x3f3f3f3f;
11 const double eps=1e-5;
12 typedef long long ll;
13 #define cl(a) memset(a,0,sizeof(a))
14 #define ts printf("*****\n");
15 const int MAXN=1005;
16 int n,m,tt;
17 int main()
18 {
19     int i,j,k,ca=1;
20     #ifndef ONLINE_JUDGE
21     freopen("1.in","r",stdin);
22     #endif
23     while(scanf("%d",&n)!=EOF)
24     {
25         int temp=0;
26         int a;
27         int ans;
28         for(i=0;i<n;i++)
29         {
30             scanf("%d",&a);
31             if(i==0)
32             {
33                 ans=a;
34             }
35             else ans^=a;
36         }
37         if(ans==0)
38            printf("No\n");
39         else
40            printf("Yes\n");
41     }
42 }
时间: 2024-10-27 14:19:35

hdu 2509 博弈 *的相关文章

HDU 1525 博弈

Euclid's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1880    Accepted Submission(s): 825 Problem Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan,

hdu 3537(博弈,翻硬币)

题意:给定了每个正面朝上的硬币的位置,然后每次可以翻1,2,3枚硬币,并且最右边的硬币开始必须是正面朝上的. 分析: 约束条件6:每次可以翻动一个.二个或三个硬币.(Mock Turtles游戏) 初始编号从0开始. 当N==1时,硬币为:正,先手必胜,所以sg[0]=1. 当N==2时,硬币为:反正,先手必赢,先手操作后可能为:反反或正反,方案数为2,所以sg[1]=2. 当N==3时,硬币为:反反正,先手必赢,先手操作后可能为:反反反.反正反.正反正.正正反,方案数为4,所以sg[2]=4.

hdu 1848 博弈之SG函数的使用

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题目简单描述为: 1.  这是一个二人游戏;2.  一共有3堆石子,数量分别是m, n, p个:3.  两人轮流走;4.  每走一步可以选择任意一堆石子,然后取走f个:5.  f只能是菲波那契数列中的元素(即每次只能取1,2,3,5,8-等数量):6.  最先取光所有石子的人为胜者:假设双方都使用最优策略,请判断先手的人会赢还是后手的人会赢. 代码为: ? 1 2 3 4 5 6 7 8 9

HDU 1525 (博弈) Euclid&#39;s Game

感觉这道题用PN大法好像不顶用了,可耻地看了题解. 考虑一下简单的必胜状态,某一个数是另一个数的倍数的时候是必胜状态. 从这个角度考虑一下:游戏进行了奇数步还是偶数步决定了哪一方赢. 如果b > 2a,那么这一方就有权利改变游戏步数的奇偶性,从而到达对自己有利的状态,所以这是一个必胜状态. 如果a < b < 2a,那么下一步只能到达(b-a, a)状态,一直模拟就行. 1 #include <cstdio> 2 #include <algorithm> 3 us

HDU 2147 (博弈) kiki&#39;s game

无奈英语不好又被坑,看到棋子能左移下移左下移,想当然地以为是Wythoff博弈了,=u= 题的意思是说每次只能选一个方向移动一步,所以找找规律就是横纵坐标为奇数的时候是必败状态. 从http://www.cnblogs.com/chaosheng/archive/2012/05/29/2524725.html 盗过来一张图比较好说明: 1 #include <cstdio> 2 3 int main() 4 { 5 int n, m; 6 while(scanf("%d%d"

hdu 2509 Be the Winner

详解:hdu 1907 John - lihaogegehuting的专栏 - 博客频道 - CSDN.NET 两道题几乎一样 代码如下: #include<stdio.h> int main() { int T,a[100],i,sum,ok; while(~scanf("%d",&T)) { sum=0; ok=0; for(i=1;i<=T;i++) { scanf("%d",&a[i]); if(a[i]>1) ok=

HDU 2509 Nim博弈

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2509 题意:有N堆,谁最后拿谁输. 关键:判断孤单堆. 1 #include<cstdio> 2 #define ll long long 3 using namespace std; 4 5 int main() 6 { 7 int n; 8 while( ~scanf("%d",&n)){ 9 int temp,ans=0,flag=0; 10 for(int i=

HDU 2509 Be the Winner(取火柴博弈2)

传送门 #include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { int n; while(~scanf("%d",&n)) { int a,res=0; int c=0,g=0; for(int i=0;i<n;i++) { scanf("%d",&a); if(a>=2) c++;

HDU 5996 博弈

http://acm.hdu.edu.cn/showproblem.php?pid=5996 博弈论待补. 这题变化了一下,因为注意到奇数层的东西(层数从1开始),对手可以模仿地动,那就相当于没动. 比如从第5层,我选择去了第4,他去第3,我去2,他去1,结果还是到我.所以只需要把偶数层的东西,拿出来, 就是n个石头的博弈了. 异或起来,判断是否等于0,就可以了.博弈论好差,寒假补. #include <cstdio> #include <cstdlib> #include <