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. git提交代码到本地仓库和远程仓库

    5.commit代码到本地git仓库 选中需要 Commit 的项目,右键->Team->Commit,       填写相关的 Commit message,并选择需要提交的 Files ...

  2. Redmine安装

    http://www.itnpc.com/news/web/146433249372595.html http://www.cnblogs.com/iluzhiyong/p/redmine.html ...

  3. action中json的应用

    这篇文章重点介绍action中json数据的返回处理:假设须要看前端代码的一些特效或ajax的json接收,请看上一篇博客:http://blog.csdn.net/yangkai_hudong/ar ...

  4. log4j的总结

    概述 log4j是日志处理的框架,相当于.net中的log4net.因为之前在.net中学习过log4net.所以.在学习log4j上,感觉很的亲切.本篇博客主要是讲一个图,好了进入正题. log4j ...

  5. 【程序猿笔试面试复习】之中的一个 网络与通信篇(一) 几大网络模型:OSI、TCP/IP、B/S与C/S、MVC结构

    9.1网络模型 9.1.1. OSI七层模型 OSI(Open System Interconnection,开放系统互联)七层网络模型称为开放式网络互联參考模型.其为国际标准组织指定的一个指导信息互 ...

  6. HDU 1506 Largest Rectangle in a Histogram(DP)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  7. 【SonicUI】关于字体高亮的问题。。

    m_pSonicString[1]->Format(_T("/c=%x, a='http://hi.csdn.net/', linkh=0xFF00F0, font, font_hei ...

  8. 文件上传流式处理commons-fileupload

    1. 从请求中获取MultipartFile @RequestMapping(value="/upload", method=RequestMethod.POST) public ...

  9. 3. Vue-router 路由

    路由是根据不同的url地址展现不同的内容或页面. 前端路由就是把不同路由对应不同的内容或页面的任务交给前端来做(在单页面应用,大部分页面结构不变,只改变部分内容的使用),之前是通过服务器根据url的不 ...

  10. vc如何让打开的子窗口默认是最大化的

    vc如何让打开的子窗口默认是最大化的 浏览: 3554 | 更新: 2011-04-09 17:04 1 0     加入杂志加入杂志 摘要:关于vc如何让打开的子窗口默认是最大化的深入研究.   步 ...