shuoj-Josephus问题-dp数学
来源:互联网 发布:python适合做什么开发 编辑:程序博客网 时间:2024/05/05 06:12
Description
有1至 N编号的N 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)做游戏。游戏开始时,以正整数m作为报数上限值,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将其密码作为新的报数上限值,从其下一个人开始重新报数,如此下去,直至所有的人全部出列为止。如N=7,m=20,每个人的密码依次是:3,1,7,2,4,8,4,则出列顺序为6,1,4,7,2,3,5。要求最后一个出列的人的编号。
Input
有多组测试数据。每组有两行,第1行有2个正整数n,m,(n,m<100),n表示人数,m表示开始时报数上限值,第2行有n个整数,一次表示第1,2,…,个人的密码。
Output
对每组测试数据,输出最后一个人的编号。
Sample Input
7 203 1 7 2 4 8 4Sample Output
5
有1至 N编号的N 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)做游戏。游戏开始时,以正整数m作为报数上限值,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将其密码作为新的报数上限值,从其下一个人开始重新报数,如此下去,直至所有的人全部出列为止。如N=7,m=20,每个人的密码依次是:3,1,7,2,4,8,4,则出列顺序为6,1,4,7,2,3,5。要求最后一个出列的人的编号。
有多组测试数据。每组有两行,第1行有2个正整数n,m,(n,m<100),n表示人数,m表示开始时报数上限值,第2行有n个整数,一次表示第1,2,…,个人的密码。
对每组测试数据,输出最后一个人的编号。
题解::
本题直接模拟很简单,但是只是模拟还是不够的。
我们还可以通过数学归纳的思想进行推导。
数学推导:
前提:编号从0开始。
首先 n = 1 时 ,最后的编号 r 为0
然后假设当n = k-1 时假设最后的编号为r
则当n = k 时,
首先淘汰的是第((m-1)%k)个人,然后我们以(m%k)为基准,剩下k个人(最后剩下的为以(m%k)为基准的编号r)既最终剩下的人为(m+r)%k
所以我们得到
r = 0
r = (m+r)%k k:1->n
1 0
- shuoj-Josephus问题-dp数学
- Josephus问题的数学方法
- Josephus问题的数学方法
- 具体数学 josephus问题最后的理解
- SHUOJ 1611 矩阵连乘问题(dp)
- shuoj 1659 跳马问题
- shuoj 1084 字符串问题
- SHUOJ报数问题
- Josephus问题
- Josephus问题
- Josephus问题
- Josephus问题
- josephus 问题
- Josephus问题
- Josephus问题
- josephus问题
- Josephus问题
- Josephus问题
- js简单制作图片焦点图
- 黑马程序员——Java---内部类1
- UIButton常用技巧
- iOS UISegmentedControl分段按钮
- linux c 生产者与消费者问题 信号量(sem_t)
- shuoj-Josephus问题-dp数学
- Android进阶——多线程和异步任务小结
- PHP 文件夹 生成 html目录树
- 弗洛伊德算法介绍
- 集成支付宝钱包支付iOS SDK的方法与经验
- jsp环境搭建
- android studio 中去除应用标题栏
- online_judge_1101
- java基础(死锁)