UVALive 5760 Alice and Bob
题意:给出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相关推荐
- Sicily1798. Alice and Bob[策略问题]
[原题描述] Description Bob is very famous because he likes to play games. Today he puts a chessboard in ...
- SDUT2608(Alice and Bob)
题目描述 Alice and Bob like playing games very much.Today, they introduce a new game. There is a polynom ...
- NYOJ 1053 Alice and Bob (N)
Alice and Bob (N) 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 也不知道是谁规定的,Alice 和 Bob总是有一堆做不完的事,和一堆奇葩想法,而且重 ...
- NYOJ练习题 又见Alice and Bob
又见Alice and Bob 时间限制:1000 ms | 内存限制:65535 KB 描述 集训生活如此乏味,于是Alice和Bob发明了一个新游戏.规则如下:首先,他们得到一个集合包含n个特 ...
- 牛客 - Alice and Bob(尺取+二分)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,和一个数字 kkk.现在给出 mmm 次询问,每次查询需要回答区间 [l,r][l,r][l,r] 内有多少个子区间,满足区间内不同的数字 ...
- 2021牛客暑期多校训练营1 A.Alice and Bob 博弈 SG函数
传送门 文章目录 题意: 思路: 题意: 有两堆石子,两个人每次可以进行如下操作:从某一堆狮子中拿出x(x>0)x(x>0)x(x>0)个,从另一堆石子中拿出s∗x(s>=0) ...
- Alice and Bob
Alice and Bob 题意: 两人博弈,每次一个人从一堆中拿k个,同时从另一堆拿k * s(s>=0)个,问谁先不能拿 10000组数据,N<=5000 题解: (x,y)表示第一堆 ...
- 【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 ...
- 【UVA - 10891 Game of Sum 】【HRBUST - 1622】 Alice and Bob (区间dp,博弈问题)
题干: 有一个长度为N的整数序列,Alice和Bob轮流取数,Alice先取.每次玩家只能从左端或者右端 取一个或多个数,但不能两端都取.所有数都被取走后游戏结束,然后统计每个人取走的所有数之和, 作 ...
- PKI世界中两个知名的情侣 Alice和Bob
PKI世界中两个知名的情侣 Alice和Bob 2007-08-07 15:46 Alice .. ¬ 写完信后把信件内容转变成MD 用她的私钥给MD加密 ® 用随机产生的对话密钥给信件加密 ¯ ...
最新文章
- HTTP头部信息解释分析(详细整理)
- Missing space before value for key ‘routes‘ key-spacing
- Collections 类
- -webkit-overflow-scrolling:touch
- 非线性调频 matlab,非线性调频信号
- Linux 探索之旅 | 第五部分第五课:循环往复,Shell 开路
- perl regular expresstion
- MybatisPlus入门之介绍
- lvalue-xvalue-prvalue
- KXD黑夜模式流星滑落个人主页HTML源码
- iOS之UI--CAGradientLayer
- sendfile()对nginx性能的提升
- 政简网:还剩一个月时间怎么科学有效复习公务员考试?
- 关于MD5的那点事,你都了解清楚了吗?
- 新一代打包神器parcel简介
- 最短Hamilton路径(哈密顿图,状压dp)
- 用户 '****' 登录失败
- 前端面试总结以及面试题
- iPhone计算机没有删除键,iphone备份相片没删除键怎么用电脑删除
- 12月更新 - 可能是最好用百度网盘搜索神器
热门文章
- axure element元件_Axure教程,产品小白从0学起
- python实现异步的原理_一篇文章理解Python异步编程的基本原理
- java路径通配符_java实现路径通配符*,**,?
- 字符集_一文搞清楚unicode字符集的三种实现方式
- 计算机系统结构_计算机系统基础:总线结构知识笔记
- LeetCode每周刷题(2019.7.8-2019.7.14)
- JavaScript中call,apply,bind方法
- 浅谈ES6中的rest参数
- 操作系统学习笔记:文件系统接口
- html 中 float 的一些研究