题目要求:
0, 1, … , n-1 这 n 个数字排成一个圈,从数字 0 开始每次从这个圈里删除第 m 个数字。求这个圈剩下的最后一个数字。本题是约瑟夫环问题。
除了以下给出的2中解法,更高级的算法:约瑟夫问题的两个O(log n)解法1. 环形链表由于要不断地从圈里删除一个数字,容易想到用链表实现。用链表将这 n 个数字存储,头尾相连,每隔 m 个删除一个,最后剩下的即为结果。
由于...
分类:
其他好文 时间:
2015-07-30 23:27:22
阅读次数:
215
http://acm.hdu.edu.cn/showproblem.php?pid=1443JosephTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s)...
分类:
其他好文 时间:
2015-07-24 20:36:16
阅读次数:
206
约瑟夫问题(有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.)约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2...
分类:
其他好文 时间:
2015-07-20 12:39:38
阅读次数:
487
#include
#include
#include
using namespace std;
const int MAXN = 1 << 17;
struct SegTree {
int n, m;
int a[MAXN + MAXN];
static int L(int i) { return i << 1;...
分类:
编程语言 时间:
2015-07-20 10:54:42
阅读次数:
189
约瑟夫环问题一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号。链表解法function king($n,$m){
$monky = range(1,$n);
$i = 0;...
分类:
Web程序 时间:
2015-07-17 12:05:39
阅读次数:
215
题目链接:点击进入
题目意思大概和约瑟夫环问题差不多,唯一的不同点在于起点改成了m;刚开始的时候我想直接链表模拟算了,但是后面一看,数据太大,就改用公式做了。约瑟夫环的公式是:f(n)=(f(n-1)+k)%n
,对于这个题起点为m,所以答案就会变成ans=(f(n)+m-k+1)%n;
ans有可能小于0,此时我们要给他加上一个n,ans+=n。代码如下:#include...
分类:
其他好文 时间:
2015-07-16 11:49:51
阅读次数:
201
题目大意:给出n,k和m,表示有n个人围成一个圈,从第m个人开始(m也要去掉),每次走k步删除掉,问最后剩下人的序号。解题思路: 数学递推
分析:
1 题目是一道变形的约瑟夫环变形问题
2 网上看到一篇很好的数学递推法
问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。编号0-(n-1)是有意义的,因为要模n,所以用0-(...
分类:
其他好文 时间:
2015-07-14 18:06:29
阅读次数:
98
题意 n个人顺时针围成一圈玩约瑟夫游戏 每个人手上有一个数val[i] 开始第k个人出队 若val[k] 0 时向左数val[k]个 第m出队的人可以得到m的约数个数个糖果 问得到最多糖果的人是谁
约瑟夫环问题 n比较大 直接模拟会超时 通过线段树可以让每次出队在O(logN)时间内完成 类似上一道插队的题 线段树维护对应区间还有多少个人没出队 那么当我们知道出队的人...
分类:
其他好文 时间:
2015-07-13 22:34:13
阅读次数:
237
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。求剩下最后的一个人的编号。
#include "stdafx.h"
#include
#include
using namespace std;
temp...
分类:
其他好文 时间:
2015-07-13 16:23:27
阅读次数:
114
今天讲的一道习题是很经典的约瑟夫环问题,其实lz对于链表的某些操作还不是太懂,所以在程序中有些地方还不太看得懂,这里借鉴的网上的做法,还请大牛能够解答我的疑惑,谢谢!标题:约瑟夫环说明:约瑟夫环是这么一个问题:已知n个人(编号1,2,。。。n)围坐在圆桌周围。从编号为k的人开始报数,数到m的人出列,...
分类:
编程语言 时间:
2015-07-13 11:51:13
阅读次数:
212