HDU 5643 King's Game 【约瑟夫环】】的更多相关文章

经典约瑟夫环 }; ; i<=n; i++) { f[i] = (f[i-] + k) % i; } 变形:k是变化的 #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <stdlib.h> #include <queue> #include <map> using namespace st…
首先约瑟夫问题的数学推理过程:我们知道第一个人(编号一定是(m-1) mod n) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m mod n的人开始):k k+1 k+2 ... n-2,n-1,0,1,2,... k-2并且从k开始报0.我们把他们的编号做一下转换:k --> 0k+1 --> 1k+2 --> 2......k-2 --> n-2问题变为(N-1)个人,报到为(M-1)的人自杀,问题规模减小了.这样一直进行下去,最后剩下编号为0的人.用函数表…
题意: 变形的约瑟夫环,最初为每个人编号1到n,第i次删去报号为i的人,然后从它的下一个人开始重新从1开始报号,问最终剩下第几号人? 分析: 首先看一下裸的约瑟夫环问题: 共n个人,从1开始报数,报到k的人从环中退出,问最后剩下的一个人的编号是多少? 为取模方便,假设下标从0开始,倒推分析: 假设该轮有n个人,那么上一轮(n+1)人,编号为0的人上一轮编号为k,也即编号为f[n]的人上一轮编号为(f[n]+k)%(n+1). 我们知道最后剩下的人在最后一轮编号肯定为0,那么这样不断倒推就可以推出…
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember history, King plans to play losephus problem in the parade gap.He calls n(1≤n≤5000) soldiers, counterclockwise in a circle, in label 1,2,3...n. The firs…
Problem Description In order to remember history, King plans to play losephus problem in the parade gap.He calls n(1≤n≤5000) soldiers, counterclockwise in a circle, in label 1,2,3...n. The first round, the first person with label 1 counts off, and th…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5643    约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到k时停止报数,报k的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报k的出圈,……,如此 下去,直到所有人全部出圈为止.当任意给定n和k后,设计算法求n个人出圈的次序.  稍微简化一下.  问题描述:n个人(编号0~(n-1)),从0开始报数,报到(k-1)的退出,剩下的人继…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3089 题目大意:一共n人.从1号开始,每k个人T掉.问最后的人.n超大. 解题思路: 除去超大的n之外.就是个约瑟夫环的裸题. 约瑟夫环递推公式,n为人数,k为步长. f(1)=0 f(n)=[f(n-1)+k]%i  i∈[2,n] f(n)还要经过起始位置修正,设起始位置为s,即ans=[f(n)+s]%n. 基本约瑟夫环优化就是当k=1的时候,每次递推就是在+1,可以直接算出来快速跳过,f(…
题目链接: POJ  1012: id=1012">http://poj.org/problem?id=1012 HDU 1443: pid=1443">http://acm.hdu.edu.cn/showproblem.php? pid=1443 约瑟夫环(百度百科): fr=aladdin" target="_blank">http://baike.baidu.com/view/717633.htm?fr=aladdin Descri…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4841 圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 104    Accepted Submission(s): 17 Problem Description 圆桌上围坐着2n个人.当中n个人是好人.另外n个人是坏人.假设从第一…
题目 题意:一共有2k个人,分别为k个好人和k个坏人,现在我们需要每隔m个人把坏人挑出来,但是条件是最后一个坏人挑出来前不能有好人被挑出来..问最小的m是多少 约瑟夫环问题,通常解决这类问题时我们把编号设为从0~n-1. 求出每一轮出列的人:start = (start + m - 1) % n 模拟过程如下(以六个人,第五为例): 1 2 3 4 5 6 易发现start1 = (0 + 5 - 1)% 6 = 4, 即a[4] = 5这个人出列 #include <stdio.h> #in…