题意:给出n堆石子,每次可以把第 i 堆取出1个石子,选择第 j 队和第 k 堆放入一个石子,i<j<=k。两人轮流操作,最后不能操作的输,两人均采用最佳策略

  如果先手能获胜,则输出先手第一步选取的 i , j , k (如有多解,则输出字典序最小的答案)否则输出 -1,-1,-1;

    我们按照从左往右分别把堆编号成 n-1,n-2,n-3 ...... ,0。取出1个第 n-i 堆的石子之后,只能在小于 n-i 的堆中选出两堆 j,k放入1个石子(j==k时,即往 j 堆放入2个石子)

  那么 i 的后继状态就是 j和k。最终,所有的石子都会到第0堆中,我们把单个石子的胜负看成一个游戏,那么sg[i]=mex{ sg[ j ]^sg[ k ] | i<j<=k };整个游戏的胜负就是所有游戏的sg函数值

  的异或和。接着我们枚举 i,j,k找出答案

  

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 int vis[1024],sg[24];
 5 void init()
 6 {
 7     int i,j,k;
 8     for(i=0;i<24;i++)
 9     {
10         for(j=0;j<i;j++)
11         {
12             for(k=0;k<=j;k++)
13             {
14                 vis[sg[j]^sg[k]]=1;
15             }
16         }
17         for(j=0;j<1024;j++)
18         {
19             if(vis[j]==0)
20             {
21                 sg[i]=j;
22                 break;
23             }
24         }
25         memset(vis,0,sizeof(vis));
26     }
27 }
28 int a[24];
29 int main()
30 {
31     init();
32     int i,j,k,n,Xor,cas=1;
33     while(~scanf("%d",&n))
34     {
35         if(n==0)
36             break;
37         Xor = 0;
38         for(i=0;i<n;i++)
39         {
40             scanf("%d",&a[i]);
41             //sg[i]^sg[i]==0
42             if(a[i]%2==1)
43                 Xor=Xor^sg[n-i-1];
44         }
45         if(Xor==0)
46         {
47             printf("Game %d: -1 -1 -1\n",cas++);
48         }
49         else
50         {
51             int flag=0;
52             for(i=0;i<n;i++)
53             {
54                 if(a[i]==0)
55                     continue;
56                 for(j=i+1;j<n;j++)
57                 {
58                     for(k=j;k<n;k++)
59                     {
60                         if((Xor^sg[n-i-1]^sg[n-j-1]^sg[n-k-1])==0)
61                             flag=1;
62                         if(flag==1)
63                             break;
64                     }
65                     if(flag==1)
66                         break;
67                 }
68                 if(flag==1)
69                     break;
70             }
71             printf("Game %d: %d %d %d\n",cas++,i,j,k);
72         }
73     }
74 }

   

     

转载于:https://www.cnblogs.com/Ray-/p/10658888.html

UVALive 5760 Alice and Bob相关推荐

  1. Sicily1798. Alice and Bob[策略问题]

    [原题描述] Description Bob is very famous because he likes to play games. Today he puts a chessboard in ...

  2. SDUT2608(Alice and Bob)

    题目描述 Alice and Bob like playing games very much.Today, they introduce a new game. There is a polynom ...

  3. NYOJ 1053 Alice and Bob (N)

    Alice and Bob (N) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 也不知道是谁规定的,Alice 和 Bob总是有一堆做不完的事,和一堆奇葩想法,而且重 ...

  4. NYOJ练习题 又见Alice and Bob

    又见Alice and Bob 时间限制:1000 ms  |  内存限制:65535 KB 描述 集训生活如此乏味,于是Alice和Bob发明了一个新游戏.规则如下:首先,他们得到一个集合包含n个特 ...

  5. 牛客 - Alice and Bob(尺取+二分)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,和一个数字 kkk.现在给出 mmm 次询问,每次查询需要回答区间 [l,r][l,r][l,r] 内有多少个子区间,满足区间内不同的数字 ...

  6. 2021牛客暑期多校训练营1 A.Alice and Bob 博弈 SG函数

    传送门 文章目录 题意: 思路: 题意: 有两堆石子,两个人每次可以进行如下操作:从某一堆狮子中拿出x(x>0)x(x>0)x(x>0)个,从另一堆石子中拿出s∗x(s>=0) ...

  7. Alice and Bob

    Alice and Bob 题意: 两人博弈,每次一个人从一堆中拿k个,同时从另一堆拿k * s(s>=0)个,问谁先不能拿 10000组数据,N<=5000 题解: (x,y)表示第一堆 ...

  8. 【CodeForces - 347C 】Alice and Bob (思维,数学,等差数列)

    题干: It is so boring in the summer holiday, isn't it? So Alice and Bob have invented a new game to pl ...

  9. 【UVA - 10891 Game of Sum 】【HRBUST - 1622】 Alice and Bob (区间dp,博弈问题)

    题干: 有一个长度为N的整数序列,Alice和Bob轮流取数,Alice先取.每次玩家只能从左端或者右端 取一个或多个数,但不能两端都取.所有数都被取走后游戏结束,然后统计每个人取走的所有数之和, 作 ...

  10. PKI世界中两个知名的情侣 Alice和Bob

    PKI世界中两个知名的情侣 Alice和Bob 2007-08-07 15:46 Alice .. ¬ 写完信后把信件内容转变成MD ­ 用她的私钥给MD加密 ® 用随机产生的对话密钥给信件加密 ¯ ...

最新文章

  1. HTTP头部信息解释分析(详细整理)
  2. Missing space before value for key ‘routes‘ key-spacing
  3. Collections 类
  4. -webkit-overflow-scrolling:touch
  5. 非线性调频 matlab,非线性调频信号
  6. Linux 探索之旅 | 第五部分第五课:循环往复,Shell 开路
  7. perl regular expresstion
  8. MybatisPlus入门之介绍
  9. lvalue-xvalue-prvalue
  10. KXD黑夜模式流星滑落个人主页HTML源码
  11. iOS之UI--CAGradientLayer
  12. sendfile()对nginx性能的提升
  13. 政简网:还剩一个月时间怎么科学有效复习公务员考试?
  14. 关于MD5的那点事,你都了解清楚了吗?
  15. 新一代打包神器parcel简介
  16. 最短Hamilton路径(哈密顿图,状压dp)
  17. 用户 '****' 登录失败
  18. 前端面试总结以及面试题
  19. iPhone计算机没有删除键,iphone备份相片没删除键怎么用电脑删除
  20. 12月更新 - 可能是最好用百度网盘搜索神器

热门文章

  1. axure element元件_Axure教程,产品小白从0学起
  2. python实现异步的原理_一篇文章理解Python异步编程的基本原理
  3. java路径通配符_java实现路径通配符*,**,?
  4. 字符集_一文搞清楚unicode字符集的三种实现方式
  5. 计算机系统结构_计算机系统基础:总线结构知识笔记
  6. LeetCode每周刷题(2019.7.8-2019.7.14)
  7. JavaScript中call,apply,bind方法
  8. 浅谈ES6中的rest参数
  9. 操作系统学习笔记:文件系统接口
  10. html 中 float 的一些研究