ny788 又见Alice and Bob
又见Alice and Bob
- 描述
- 
集训生活如此乏味,于是Alice和Bob发明了一个新游戏。规则如下:首先,他们得到一个集合包含n个特定的整数,接着他们轮流做以下操作,每一次操作,Alice或者Bob(轮到谁就是谁)会从集合中选择两个整数x 和 y ,(但是集合中不能包含| x - y|),接着他就会把整数|x - y| 加入集合,因此,集合中的数据多加了一个…… 如果当前玩家不能执行操作了,他就输了。问题是如果Alice和Bob都很聪明的情况下,谁能获胜呢?Alice是首先执行操作。 - 输入
- 多组测试数据,每组测试数据包含两行。
 第一行一个整数n( 2 <= n <= 110),初始集合包含元素的个数
 第二行依次输入n个数a1,a2……an,(1 <= ai <= 10^9)以空格分开,代表集合元素。
- 输出
- 如果Alice 获胜输出 “Alice”,否者输出“Bob”
- 样例输入
- 
3 
 3 4 5
- 样例输出
- 
Bob 讲解:摘抄的 看起来像博弈题,其实和博弈没有一点关系。给一个原始集合,每次操作都会往集合中加入一个新的元素,找出最后集合中元素的个数total,然后用 total-n 就是新加进去的元素个数。判断total-n 的奇偶性就可以判断出谁赢了。如何求total呢?如果开始时集合中只有2个数6 27,通过这两个数可以加进集合的数有21 15 9 3,这个过程实际上就是求gcd(6,27)的过程,最小的数就是gcd(6,27)=3,还发现集合中的元素都是3的倍数,那我们只需要判断[1,27]之间3的倍数有多少个就行了。 解法:求出n个数中的最大值Max和这n个数的最大公约数p,判断(Max / p — n)的 奇偶性即可。奇数Alice赢。 代码如下: #include<cstdio> 
 #include<iostream>
 using namespace std;
 int gcd(int a,int b)
 {
 int r;
 while(b!=)
 {
 r=a%b;
 a=b;
 b=r;
 }
 return a;
 }
 int main()
 {
 int n,a[],i;
 while(cin>>n)
 {
 int Max=;
 for(i=;i<n;i++)
 {
 cin>>a[i];
 if(a[i]>Max)
 Max=a[i];
 }
 int p=a[];
 for(i=;i<n;i++)
 p=gcd(p,a[i]); int ans=Max/p-n;
 printf(ans& ? "Alice\n" : "Bob\n");
 } return ;
 }
 
ny788 又见Alice and Bob的更多相关文章
- hdu 4268  Alice and Bob(multiset|段树)
		Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ... 
- hdu 3660 Alice and Bob's Trip(树形DP)
		Alice and Bob's Trip Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ... 
- 2016中国大学生程序设计竞赛 - 网络选拔赛 J. Alice and Bob
		Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ... 
- bzoj4730: Alice和Bob又在玩游戏
		Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ... 
- Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)
		Alice and Bob Time Limit: 1000ms Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ... 
- sdutoj 2608 Alice and Bob
		http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2608 Alice and Bob Time L ... 
- hdu 4268 Alice and Bob
		Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ... 
- 2014 Super Training #6 A Alice and Bob --SG函数
		原题: ZOJ 3666 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3666 博弈问题. 题意:给你1~N个位置,N是最 ... 
- ACdream 1112 Alice and Bob(素筛+博弈SG函数)
		Alice and Bob Time Limit:3000MS Memory Limit:128000KB 64bit IO Format:%lld & %llu Submit ... 
随机推荐
- uploadify上传之前判断一个input输入框是否为空
			onUploadStart:function(file){ if ($("#ContractCode").val() == "") { alert(" ... 
- mysql字符集和字符排序
			mysql的字符集和字符序: 字符序:字符序(Collation)是指在同一字符集内字符之间的比较规则 一个字符序唯一对应一种字符集,但一个字符集可以对应多种字符序,其中有一个是默认字符序 ... 
- Centos7安装Openresty
			通过yum安装 在 /etc/yum.repos.d/ 下新建 OpenResty.repo 内容 [openresty] name=Official OpenResty Repository bas ... 
- C++调用Java的Jar包
			一个简单需求:用C++调用Jar包. 实现基本思路:调用CreateProcess API来启动cmd.exe执行jar包. 调用类CJarAppCall. JarAppCall.h #pragma ... 
- Integer 内部实现
			public static void main(String[] args) { Integer in1 = 128; Integer in2 = 128; System.out.println(in ... 
- HDUOJ----4504 威威猫系列故事——篮球梦
			威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ... 
- vi 删除全部内容
			非插入模式下删除所有内容 a.光标移到第一行,然后按10000后然后点dd b.光标移到第一行,按下dG 命令输入模式下删除所有内容 a.输入命令.,$d,回车 b.输入命令1,999dd,回车 
- 关于JavaScript中Get/Set访问器
			有时候大家可能会纳闷,在使用JavaScript的时候,只需要给一个系统变量赋值就可以触发一系列操作去相应. 但是我们在写Js的时候,修改了一个自定义变量,却连个P都没有.是不是很郁闷呢? 其实,我们 ... 
- iOS - Contacts 通讯录
			Contacts 通讯录 1.访问通讯录 设置系统访问通讯录权限 1.1 iOS 9.0 及 iOS 9.0 之后获取通讯录的方法 iOS 9.0 及 iOS 9.0 之后获取通讯录的方法 // 包含 ... 
- 安卓请求网络错误 直接在main Thread 进行网络操作出现maintreamexception
			StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites ... 
