对于约瑟夫问题,若暴力模拟游戏过程,则时间复杂度会变为报的数 人数。 如果问题只是询问的最终留的人数,则可以达到o(n)的算法 利用递推的思想。若只有一个人游戏,则肯定那个人获胜。 逆向思维一下,一个人的游戏肯定是由两个人的游戏转化过来。 两个人的游戏肯定是从三个人的游戏转化过来。 可是怎么递推呢? ...
分类:
其他好文 时间:
2018-03-02 20:33:07
阅读次数:
113
#include <iostream>#include <stdlib.h>using namespace std; typedef char ElemType;typedef struct LNode{ ElemType data; //数据域 struct LNode *next; //指针域} ...
分类:
编程语言 时间:
2017-11-04 16:28:49
阅读次数:
160
约瑟夫问题的变形 看了网上的题解,这题有一个trick就是每轮删完点后将剩下的点重新编号,从0编到n-1。 这样操作之后,我们就可以对删点前后的两个状态进行递推了。 假设我现在有一排点,编号为0到n-1,现在我从0开始数k个删掉第k个点,也就是删掉点k-1。 剩下的点为0,1,2……k-2,k……, ...
分类:
其他好文 时间:
2017-10-30 15:59:01
阅读次数:
193
P1996 约瑟夫问题 (什么?!要给学弟学妹讲约瑟夫问题?!难道就不怕我给他们讲错了吗?! 啊啊啊,为了不给学弟学妹们讲错,蒟蒻表示要临阵磨一下刀、、、) 题目背景 约瑟夫是一个无聊的人!!! 题目描述 n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报 ...
分类:
其他好文 时间:
2017-10-15 14:19:51
阅读次数:
137
本来我是不想学这个东西的,但是谁让他考试考到了呢? 约瑟夫问题: n个人(编号为0,1,...,n-1)围成一个圈子,从0号开始依次报数,每数到第m个人,这个人就得自杀,之后从下个人开始继续报数,直到所有人都死亡为止。问最后一个死的人的编号。 方法1:暴力 O(nm) 会打码的都知道。 方法2:白书 ...
分类:
其他好文 时间:
2017-10-08 22:28:56
阅读次数:
210
任务说明:数组,链表,队列,栈,都是线性结构。巧用这些结构可以做出不少方便的事情。 ...
分类:
其他好文 时间:
2017-10-08 12:57:06
阅读次数:
113
链表使用的是带头节点的双向循环链表: system.h: Status InitList(DuLinkList &L){ L = (DuLinkList)malloc(sizeof(DuLNode)); DuLinkList q,p; L->next = L; L->prior = NULL; q= ...
分类:
其他好文 时间:
2017-09-30 21:06:16
阅读次数:
258
1282 约瑟夫问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 1282 约瑟夫问题 1282 约瑟夫问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 时间限制: 1 s 空间限制: 128000 KB 题目等级 ...
分类:
其他好文 时间:
2017-09-07 21:29:13
阅读次数:
142
约瑟夫问题描述:n个人围成一个圈,编号为0,1,2,..,n-1,设定一个常数k,然后从0号开始从1依次报数,报到k的那个人退出圈,后面一个人继续从1开始报数,依次类推,求最后剩下的人的编号 方法1:模拟游戏过程的方法,将n个人串成一个循环链表,不停地去遍历链表,直到最后剩下一个结点。优点:方法直观 ...
分类:
其他好文 时间:
2017-09-04 15:58:37
阅读次数:
223