Gym 100952G&&2015 HIAST Collegiate Programming Contest G. The jar of divisors【简单博弈】
G. The jar of divisors
time limit per test:2 seconds
memory limit per test:64 megabytes
input:standard input
output:standard output
Alice and Bob play the following game. They choose a number N to play with. The rules are as follows:
- They write each number from 1 to N on a paper and put all these papers in a jar.
- Alice plays first, and the two players alternate.
- In his/her turn, a player can select any available number M and remove its divisors including M.
- The person who cannot make a move in his/her turn wins the game.
Assuming both players play optimally, you are asked the following question: who wins the game?
Input
The first line contains the number of test cases T (1 ≤ T ≤ 20). Each of the next T lines contains an integer (1 ≤ N ≤ 1,000,000,000).
Output
Output T lines, one for each test case, containing Alice if Alice wins the game, or Bob otherwise.
Examples
Input
2
5
1
Output
Alice
Bob
题目链接:http://codeforces.com/gym/100952/problem/G
题意:有一个容器里装着1-n n个数,A和B每次任意说一个数m,那么他要拿走容器里m的所有因子,如果谁拿空了容器,那么他输了,求先手赢还是后手赢
思路:只有1是后手赢,因为1只能拿一次,大于1的情况,假设a和b都不是聪明的,假设先手出x,后手出y,结果是后手赢,那么现在a和b都是聪明的,先手可以直接出x*y(即先手可以复制后手的操作,先手的操作可以包括后手的操作),则可以赢后手,所以大于1的情况一定是先手赢!
下面给出AC代码:
1 #include <bits/stdc++.h>
2 using namespace std;
3 inline int read()
4 {
5 int x=0,f=1;
6 char ch=getchar();
7 while(ch<'0'||ch>'9')
8 {
9 if(ch=='-')
10 f=-1;
11 ch=getchar();
12 }
13 while(ch>='0'&&ch<='9')
14 {
15 x=x*10+ch-'0';
16 ch=getchar();
17 }
18 return x*f;
19 }
20 inline void write(int x)
21 {
22 if(x<0)
23 {
24 putchar('-');
25 x=-x;
26 }
27 if(x>9)
28 write(x/10);
29 putchar(x%10+'0');
30 }
31 int main()
32 {
33 int T;
34 T=read();
35 while(T--)
36 {
37 int n;
38 n=read();
39 if(n>1)
40 printf("Alicen");
41 else printf("Bobn");
42 }
43 return 0;
44 }
- 为什么要用 Node.js
- JavaScript定时器:setTimeout与setInterval 定时器与异步循环数组
- 深入理解javascript原型和闭包(1)——一切都是对象
- 程序员面试50题(2)—二元查找树的后序遍历结果[数据结构]
- 总结了一些指针易出错的常见问题(一)
- Eureka 服务上下线监控
- 程序员面试50题(1)—查找最小的k个元素[算法]
- Netty4自带编解码器详解
- C和指针小结(C/C++程序设计)
- Netty-整合Protobuf高性能数据传输
- Netty-整合kryo高性能数据传输
- 40个重要的HTML 5面试问题及答案
- js调用原生API--陀螺仪和加速器
- OpenDaylight开发-DataStoreChange监听器三种类型
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python Numpy中数据的常用保存与读取方法
- python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
- Django Admin设置应用程序及模型顺序方法详解
- 在 Pycharm 安装使用black的方法详解
- Android开发手机无线调试的方法
- Android Studio Gradle插件版本与Gradle版本之间的对应关系
- Android Usb设备的监听(Dev)外设端口的判定以及耳机的插拔
- Android自定义View实现简单文字描边功能
- 在脚本中单独使用django的ORM模型详解
- Android5.0之Activity的转场动画的示例
- Django-rest-framework中过滤器的定制实例
- Python greenlet和gevent使用代码示例解析
- 完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
- Android开发中Intent.Action各种常见的作用汇总
- Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题