简单博弈
来源:互联网 发布:linux打包命令 zip 编辑:程序博客网 时间:2024/05/22 09:47
题目描述
话说,小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 简单博弈
- 关于 ImageLoader 只显示旧图片不显示新图片的问题?
- 寒假篇12-笨小猴
- Linux查找当前目录下的文件
- 火星人家园接手无穷小放飞互联网计划,打造火星人的“百年老店”
- Jmeter监控系统资源
- 简单博弈
- SpringBoot中AOP的配置
- ligerUI调用$.ligerDialog.open弹出窗
- 3.9.1 磁道、扇区、柱面和磁头数
- tomcat 设置http代理
- Android开发:创建项目后报错,com.android.ide.common.process.ProcessException: Failed to execute aapt
- Win7下java环境变量参数配置
- 超简单的使用drawerlayout实现QQ的侧拉面板效果
- zb的生日