简单博弈
来源:互联网 发布:windows账号登陆 编辑:程序博客网 时间:2024/05/22 10:59
题目描述
话说,小C经过上次被小T实力坑了一把以后呀,他就决定发明一个数字游戏来坑一坑小T!游戏规则是这样~
在游戏开始前,小C会任意的选出一个正整数n(1≤n≤2^32-1),同时令m=1。在玩的过程当中,小C和小T每个人都可以将m的值扩大2到9中的任意倍数(倍数一定是整数),两个人一人扩大一次,第一个使m≥n的人就是最后的赢家。
因为两个人都在互相算计,所以都是用的最佳策略,问最后是谁赢?
(上次因为吃了先手的亏,小C决定先手,也就是说:每次都是小C第一个玩)。
输入
多组输入(文件尾结束)
每行一个正整数n
输出
对于每个结果:
如果小C赢,则输出"C",
如果小T赢,则输出"T"。
(记得换行!!)
样例输入
9
样例输出
C
思路:
如果先手可以到达终止局面,直接跳终止局面获得胜利
否则,把对手推到必败局面,相当于获得胜利!
思路很简单,关键在找必败局面:
把问题稍微转换一下,便于找必败局面: 把m每次乘以2-9直到大于等于n -> 把n每次除以2-9(向上取整)直到n<=1为获胜;
那么可以一次到达目标的必胜局区间是[1,9] ,第一个必败局面是(9,18],因为除9达不到1,除其他数对手必胜;
同理可以一次到达(9-18]的必胜局的区间是(19,18*9] ,再推一个必败局(18*9,18*9*2],
再推一个必胜局[18*9*2+1,18*9*2*9] ,再推一个必败局(18*9*2*9,18*9*2*9*2]
必胜局:(18^n,18^n*9]...
1 #include "cstdio" 2 #include "algorithm" 3 #include "cstring" 4 #include "cmath" 5 long long a[10],b[10]; 6 int main() 7 { 8 int n,cnt=0; 9 long long m,s;10 s=(long long )(pow(2,32)-1);11 a[0]=1,b[0]=9;12 for(int i=1;i<10;i++){13 m=(long long)(pow(18,i));14 if(m<=s){15 a[i]=m;16 b[i]=m*9;17 cnt++;18 }19 }20 while (scanf("%d",&n)==1){21 int k=0;22 for(int i=0;i<cnt;i++){23 if(a[i]<n&&n<=b[i]){24 printf("C\n");25 k=1;26 break;27 }28 }29 if(!k){printf("T\n");}30 }31 return 0;32 }
0 0
- 简单博弈
- 简单博弈
- 简单博弈
- 简单博弈
- 简单的拍卖博弈
- POJ 2484 简单博弈
- cf div_124_a(简单博弈)
- 简单博弈10道
- 简单博弈整理
- 简单博弈题
- 简单博弈小结
- 简单博弈总结
- hdu 2897简单博弈
- hdu1907John 简单博弈
- poj2484----简单博弈
- 简单巴什博弈
- SG博弈简单题
- MCS 简单博弈
- [LeetCode]337. House Robber III
- 开通博客
- 使得守护进程一次执行一个
- 岁月安好,码农也有自己的人生
- 养成良好的编程习惯(Java, python)
- 简单博弈
- Bootstarp 基础 表单部分
- android sdk国内无法更新
- WinServer2012搭VPN(二)配置路由和远程访问
- 2016传智博客前端与移动视频教程
- symantec backup exec 备份Exchange DAG mailbox databases query and write error
- R语言导入excel文件
- 简单程序设计-五子棋
- 小程序语音与讯飞语音识别踩坑过程