Poj 3517 And Then There Was One Joseph核心问题
基本上纯Joseph核心问题,只是第一步多一件。m。
然后你就可以用获得的递推公式:
Win(n) 代表n当个人的中奖号码,
然后,Win(n)必须相等Win(n-1)。当一个人将在下一次删除队列。
下一个出队列的人是谁呢? 假设模是mod的话,那么下一个出队号码计算为:
Lose(n) = mod % n;
if (Lose(n) == 0) Lose(n) = n;
这样得到公式:
Win(n) - Lose(n) = Win(n-1);
Win(n) = Win(n-1) + Lose(n);
可是注意人数仅仅有n个了,所以要取模:
Win(n) = (Win(n-1) + Lose(n)) % n;
if (Win(n) == 0) Win(n) = n;
然后由于最后要剩下一个人。那么最后一个人为Win(1) = 1;
可是假设写一般的递归公式。那么就会导致栈溢出的,所以要逆过来,从仅仅有1个人的时候推起,推到第n
这样够清晰了吧,这你都不明确我就没办法了。
作者:靖心 http://blog.csdn.net/kenden23/article/details/30050425
最后得到AC代码:
#include <cstdio>
int main()
{
int n, k, m;
while (scanf("%d %d %d", &n, &k, &m) && m)
{
int winN_1 = 1, winN = 0;
for (int i = 2; i < n; i++)
{
int t = k % i;
if (t == 0) t = k; winN = (winN_1 + t) % i;
if (winN == 0) winN = i; winN_1 = winN;
}
int t = m % n;
if (t == 0) t = m; winN = (winN_1 + t) % n;
if (winN == 0) winN = n; printf("%d\n", winN);
}
return 0;
}
当然我们能够简化上面程序。思路是一样的,只是依据模的特性简化一下罢了:
网上通常是以下这种程序,只是他们的推导。我个人认为较难懂,所以有上面我自己的推导和程序。
我的推导是把这种模简化隔离出来,我个人认为会清晰非常多。
所以假设你看了网上类似的以下程序,认为糊里糊涂的话。建议能够參考我上面的程序。
#include <cstdio>
int main()
{
int n,k,m;
while(scanf("%d%d%d",&n,&k,&m) && n)
{
int winN = 0, winN_1 = 0;
for(int i = 2; i < n; i++)
{
winN = (winN_1 + k) % i;
winN_1 = winN;
}
winN = (winN_1 + m)%n;
printf("%d\n", winN+1);
}
return 0;
}
版权声明:笔者靖心脏。景空间地址:http://blog.csdn.net/kenden23/,只有经过作者同意转载。
Poj 3517 And Then There Was One Joseph核心问题的更多相关文章
- UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There W ...
- poj 3517
题目链接 http://poj.org/problem?id=3517 题意 约瑟夫环 要求最后删掉的那个人是谁: 方法 理解递推公式就行了 考虑这样一组数据 k ...
- POJ 3517 And Then There Was One( 约瑟夫环模板 )
链接:传送门 题意:典型约瑟夫环问题 约瑟夫环模板题:n个人( 编号 1-n )在一个圆上,先去掉第m个人,然后从m+1开始报1,报到k的人退出,剩下的人继续从1开始报数,求最后剩的人编号 /**** ...
- poj 3517 约瑟夫环
最简单的约瑟夫环,虽然感觉永远不会考约瑟夫环,但数学正好刷到这部分,跳过去的话很难过 直接粘别人分析了 约瑟夫问题: 用数学方法解的时候需要注意应当从0开始编号,因为取余会等到0解. 实质是一个递推, ...
- Poj 3517 And Then There Was One(约瑟夫环变形)
简单说一下约瑟夫环:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个 ...
- poj 3517(约瑟夫环问题)
And Then There Was One Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4873 Accepted: ...
- poj 1012 & hdu 1443 Joseph(约瑟夫环变形)
题目链接: POJ 1012: id=1012">http://poj.org/problem?id=1012 HDU 1443: pid=1443">http:// ...
- POJ 1012 Joseph 约瑟夫问题
http://poj.org/problem?id=1012 早上去图书馆复习苦逼的复习....万恶的数逻.T T我还要自我安慰的说复习完了奖励回来刷水题~ 10点多的时候外面校运会大吼撑杆跳的那个. ...
- POJ 1012 Joseph
Joseph Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44650 Accepted: 16837 Descript ...
随机推荐
- jvisualvm远程监控Tomcat
网上已经有很多这方面的资料,但有些很杂乱,这里做了整理总结. 一.Java VisualVM 概述 对于使用命令行远程监控jvm 太麻烦 . 在jdk1.6 中 Oracle 提供了一个新的可视化的. ...
- 精致的外观Request
为什么要说Request精致的外观?请注意,我们这里所说的并不总是理解含义的外观门面,事实上,它使用的立面设计图案.使用的主要考虑数据安全的门面.它涉及到一个更大的系统系统的多个子系统之间的互动沟通. ...
- 【翻译自mos文章】回收 asm磁盘空间的方法
回收 asm磁盘空间的方法 參考原文: How To Reclaim Asm Disk Space? (Doc ID 351866.1) 适用于: Oracle Database - Enterpri ...
- js 加载初始化日期
//初始化加载时间 $(function(){ var now = new Date(); var year = now.getFullYear(); //年 ...
- 王立平--怎么查看Unity的版本号
1.打开Unity,Help->About Unity 2.版本
- hdu 2767 Proving Equivalences 强连通缩点
给出n个命题,m个推导,问最少添加多少条推导,能够使全部命题都能等价(两两都能互推) 既给出有向图,最少加多少边,使得原图变成强连通. 首先强连通缩点,对于新图,每一个点都至少要有一条出去的边和一条进 ...
- 【BZOJ1791】【IOI2008】【基环树】island(status第一速度)
1791: [Ioi2008]Island 岛屿 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 908 Solved: 159 [Su ...
- 【ASP.NET】关于iframe的两个技巧
原文:[ASP.NET]关于iframe的两个技巧 最近在给朋友写个网站,虽然不大,但是也碰到了一些问题.这篇就为解决ASP.NET中关于IFRAME的两个很现实的问题提供解决方法.PS:呵呵,又做了 ...
- 【转】Robot Framework 快速入门
目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...
- YUV摘要格式
始终保持视频数据YUV联系,因为基于其产品的组织不同的公司格不同的类型定义,派生出多种不同YUV格公式. 大体,YUV从在点的形式的像素组织中,有两个:1.planer状态.2.packet状态. p ...