Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

Nic和Susan在玩一个有趣的游戏:在游戏开始前,他们先约定一个正整数n,同时令m=1。游戏过程中,每个人都可以将m的值扩大2到9中的 

任意倍数。第一个使得m≥n的人就是最后的赢家。 

假设Nic和Susan都十分聪明,并且游戏过程中都使用最佳的策略,问谁会是最后的赢家(Nic总是第一个先玩)。

【输入格式】

一个正整数n(1≤n≤2^32-1)。

【输出格式】

在使用最佳的策略的情况下,如果Nic必胜,则输出“Nic”。如果Susan必胜,则输出“Susan”。否则输出“God”。

【数据规模】

Sample Input1

9

Sample Output1

Nic
【题解】
等价题意如下

给定N,Nic和Susan轮流将N整除2~9,第1个使N<=1的人赢。

Nic先手,问对于给定的N谁必胜。谁必胜
设f[n]表示N为n时是先手赢还是先手输。
转移
假设x ∈{2,3,4,5,6,7,8,9};
如果n/x为整数。则M=n/x否则M= (n / x)+1 这里的除法是整除运算。直接去尾。
然后f[n] = f[n] || !f[M];
我们这里的讲解围绕那个等价题意展开。
F[1..9]都为true表示Nic只要除一下就能<=1了。所以是先手赢。
然后我们对F[t]考虑。
如果f[t/x](这里的x∈上面那个区间)是先手输。也就是说先手从t/x开始会输。
那么我们只要让t/x变成t就好了,然后就变成先手赢了。
因为你是t。然后除一个x就变成t/x了。然后先手就不是nic了。而是Susan.而f[t/x]==true表示在t/x时先手(这下变成Susan)一定会输。那不就等价为f[t]是先手(nic)赢了吗?
根据这样的规律我们可以写出以下程序
(注意:下面这个程序不足以过所有的数据);
memset(bo, false, sizeof(bo));

for (int i = 1; i <= 9; i++)

{

bo[i] = true;

}

for (int i = 10; i <= 21999999; i++)

for (int j = 2; j <= 9; j++)

{

int mm;

if ((i %j) == 0)

mm = i / j;

else

mm = (i / j) + 1;

if (!bo[mm])

bo[i] = true;

}
然后我们用这个程序求出bo[1..2000]的值。进而可以发现规律
—n =[1, 9],先手必胜
—n =[10, 18],先手必败即后手必胜
—n =[19, 162],先手必胜
—n =[163, 324],先手必败即后手必胜
也就是先手胜i = 9 if (n<=9) 先手
后手胜i=i*2 if (n <=i) 后手
先手胜i=i*9 if (n <=i) 先手
后手胜i=i*2 if (n <= i)后手
i会很大 ,要用long long
。。。
【代码】
/*
等价题意如下
给定N,Nic和Susan轮流将N整除2~9,第1个使N<=1的人赢。
Nic先手,问对于给定的N谁必胜。 */
#include <cstdio> long long n; int main()
{
scanf("%lld", &n);
long long i = 9; //一开始i == 9然后小于9就是先手胜
int b = 1;
while (b != 2) //这个条件是不可能实现的 。所以就一直循环。
{
if (n <= i) //如果在我们找到的规律区间里就输出相应的答案 然后结束循环
{
if (b == 1)
printf("Nic\n");
else
printf("Susan\n");
break;
}
if (b == 1) //如果现在是先手胜的区间那么就直接*2
i = i * 2;
else //否则乘9;
i = i * 9;
b = 1 - b;
}
return 0;
}

【u206】最大赢家的更多相关文章

  1. iFace Chain [ 爱妃链 ] 或将凭借人脸密钥技术成为安全领域最大的赢家

    前段时间iFace Chain [ 中文音译名称: 爱妃链 ] 安全专家揭密了区块链领域,数字资产存放于无信用钱包中的一些风险,并为区块链玩家解密如何安全保护资产私钥,我们再来回顾分析一下目前跑路钱包 ...

  2. [Swift]LeetCode486. 预测赢家 | Predict the Winner

    Given an array of scores that are non-negative integers. Player 1 picks one of the numbers from eith ...

  3. L1-055 谁是赢家

    某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 3 名评委投票两部分共同决定.规则为:如果一位艺人的观众票数高,且得到至少 1 名评委的认可,该艺人就胜出:或艺人的观 ...

  4. leetcode 486 预测赢家

    题目描述 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,--.每次一个玩家只能拿取一个分数,分数被拿取之后不再可取.直到没 ...

  5. 少女花海自拍撞亡:自拍PK火车速度,没有赢家

    心理学研究,自拍是一种自我强化的过程.人们都或多或少有着自我关注的倾向,即“自恋”.而人作为有思想的群体性社会动物,有着分享和交流的欲望.尤其是现代快节奏的生活常使人感觉“亚历山大”,自拍恰恰就成为释 ...

  6. 3D打印浪潮中的赢家与输家

    3D打印浪潮中的赢家与输家 微博 空间 微信 新浪微博 邮箱 QQ好友 人人网 开心网 [导读]虽然目前3D打印行业规模不大且比较分散,但相关上市公司数量惊人.最大的两家是Stratasys和3D S ...

  7. 486 Predict the Winner 预测赢家

    给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,…….每次一个玩家只能拿取一个分数,分数被拿取之后不再可取.直到没有剩余分数 ...

  8. YTU 2553: 谁是赢家

    2553: 谁是赢家 时间限制: 1 Sec  内存限制: 128 MB 提交: 94  解决: 25 题目描述 某一天,hcbbt等一群弱菜去tamara巨巨家里一起玩了一个卡牌游戏.巨 巨家里有2 ...

  9. 每日一题-——LeetCode(486) 预测赢家

    题目描述: 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,…….每次一个玩家只能拿取一个分数,分数被拿取之后不再可取.直到 ...

随机推荐

  1. Mysql 简介二

    Mysql 数据库引擎: 数据库引擎是用于存储.处理和保护数据的核心服务 Mysql支持的引擎一般有这几种: MyISAM Mysql 5.1版本之前默认的存储引擎,仅仅支持表锁,但查询速度较Inno ...

  2. LiveReload配置,安装使用方法~~~前端页面神助手

    一.Chrome端安装LiveReload插件 1.首先这里啰嗦一下,如果Chrome无法进入商店,可以先安装一下谷歌商店助手 谷歌商店插件地址 http://pan.baidu.com/s/1dF1 ...

  3. docker网络访问

    一 docker网络访问 描述: 在启动容器的时候,如果不指定对应的参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的.当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或者-p ...

  4. JQuery map()函数

    DOM.map(callback(index,domElement)); 对匹配元素执行函数对象. 返回值是 jQuery 封装的数组,使用 get() 来处理返回的对象以得到基础的数组. 返回数据类 ...

  5. Java Web学习总结(6)——通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 package gacl.res ...

  6. 启动Tomcat,startup.bat一闪而过的解决办法

    1.打开命令行:win+R --> cmd2.将解压后的tomcat\bin\startup.bat文件拖到控制台窗口中,回车. 这样就可以看到错误信息的提示,根据提示修改即可.

  7. 【CS Round #48 (Div. 2 only)】Dominant Free Sets

    [链接]h在这里写链接 [题意] 让你在n个点组成的集合里面选取不为空的集合s. 使得这里面的点没有出现某个点a和b,ax>=bx且ay>=by; 问你s的个数. [题解] 我们把这些点按 ...

  8. hunnu 11545小明的烦恼——找路径 (最大流)

    小明的烦恼--找路径  Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users: ...

  9. amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse

    amazeui学习笔记--js插件(UI增强3)--折叠面板Collapse 一.总结 注意点: 1.data-am-collapse:这个东西就是展开折叠事件 2.am-collapse(包括其下属 ...

  10. 4、qq物联SDK介绍及实例讲解

    1.到QQ物联官网http://iot.open.qq.com中下载软件SDK S3C2440_20161122_1.6.205_r4288.tar.gz注意:在后续大家实际开发过程中,可能你会下载到 ...