简单博弈

                      题目描述

话说,小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 }
时间: 2024-10-25 19:45:50

简单博弈的相关文章

ACM: NBUT 1107 盒子游戏 - 简单博弈

NBUT 1107  盒子游戏 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format: Practice Appoint description:  System Crawler  (Aug 13, 2016 10:35:29 PM) Description 有两个相同的盒子,其中一个装了n个球,另一个装了一个球.Alice和Bob发明了一个游戏,规则如下:Alice和Bob轮流操作,Alice先操作每次操作时,游戏者先看看

HDU 1846 Brave Game (简单博弈)

HDU 1846 Brave Game (简单博弈) ACM 题目地址: HDU 1846 Brave Game 题意: 中文. 分析: 博弈入门. 如果n=m+1,因为最多取m个,所以先拿的人拿多少个,后拿的人能全拿走. 所以判断n%(m+1)即可. 代码: /* * Author: illuz <iilluzen[at]gmail.com> * File: 1846.cpp * Create Date: 2014-09-20 10:05:26 * Descripton: game */ #

[简单博弈] hdu 1525 Euclid&#39;s Game

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1525 Euclid's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1832    Accepted Submission(s): 808 Problem Description Two players, Stan and

hdu 2999 sg函数(简单博弈)

Stone Game, Why are you always there? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 393    Accepted Submission(s): 132 Problem Description "Alice and Bob are playing stone game...""E

Codeforces 15C Industrial Nim 简单博弈

题目链接:点击打开链接 题意: 给定n 下面n行,每行2个数u v 表示有v堆石子:u,u+1,u+2···u+v-1 问先手必胜还是后手必胜 思路: 首先根据Nim的博弈结论 把所有数都异或一下,看结果是0还是非0 而这里因为数字太多所以想优化 那么其实对于一个序列 u, u+1, u+2 ···· 显然 {4,5} {,6,7}, {8,9} 这样2个一组的异或结果就是1 那么只需要把序列分组,分成{偶数,奇数} 然后Y一下.. #include<stdio.h> #include<

hdu3951 Coin Game(简单博弈)

Coin Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1627    Accepted Submission(s): 936 Problem Description After hh has learned how to play Nim game, he begins to try another coin game w

[POJ1082&amp;POJ2348&amp;POJ1067&amp;POJ2505&amp;POJ1960]简单博弈题总结

鉴于时间紧张...虽然知道博弈是个大课题但是花一个上午时间已经极限了... 希望省选过后再回过头来好好总结一遍吧. 接下来为了看着顺眼一点...还是按照难度顺序吧   POJ1082 一道最简单的博弈题,只需要DP就可以过. 在这道题里我尽情展示了多函数多过程的代码风格.. program poj1082; const u:set of 0..20=[1,3,5,7,8,10,12]; var n,i,x,y,z:longint; f:array[1900..2002,1..12,1..31]o

hdu 1846 Brave Game 简单博弈

Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻.今天,大家选择上机考试,就是一种勇敢(brave)的选择:这个短学期,我们讲的是博弈(game)专题:所以,大家现在玩的也是"勇敢者的游戏",这也是我命名这个题目的原因.当然,除了"勇敢",我还希望看到"诚信",无论考试成绩如

Acdream 1416 Crazy Nim(简单博弈找规律)

传送门 Crazy Nim Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) Submit Statistic Next Problem Problem Description Alice and Bob like to play crazy nim. The game proceeds as follows. There are several stones arranged in