线段树-约瑟夫问题 题+题解.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线段树-约瑟夫问题题题解

Wikioi : 1282 约瑟夫问题 题目描述 Description 有编号从1到N的N个小朋友在玩一种出圈的游戏。开始时N个小朋友围成一圈,编号为I+1的小朋友站在编号为I小朋友左边。编号为1的小朋友站在编号为N的小朋友左边。首先编号为1的小朋友开始报数,接着站在左边的小朋友顺序报数,直到数到某个数字M时就出圈。直到只剩下1个小朋友,则游戏完毕。 现在给定N,M,求N个小朋友的出圈顺序。 输入描述 Input Description 唯一的一行包含两个整数N,M。(1=N,M=30000) 输出描述 Output Description 唯一的一行包含N个整数,每两个整数中间用空格隔开,第I个整数表示第I个出圈的小朋友的编号。 分析: 由题意也可以看出,算法明确的分为两部分:模拟约瑟夫 + 求取原始序号 。 1. 约瑟夫模拟:使用相对坐标(相对于环内),例如当前被踢位置为k,下一个被踢的是+m, 则k被踢掉以后,原本的k+1就成了k(相对坐标嘛)。这样下一个位置就应该是 新K + m-1 。 再考虑到循环意义:next = (k + m-1 - 1) % 人数 + 1。 当m为负向时,同理,只是要注 意保证求得的下一次位置值是个正值。 2. 取原始序号:这个直接看下面的代码( update() ) Code: #include iostream #include cstdio using namespace std; #define LL long long const int N = 30001*4; #define lson l,m,rt1 #define rson m+1,r,rt1|1 int sum[N2]; int tree[N2][2]; void PushUp(int rt) { sum[rt] = sum[rt1] + sum[rt1|1]; } void build(int l,int r,int rt) { tree[rt][0] = l; tree[rt][1] = r; if(l == r) { sum[rt] = 1; return; } int m = (l+r)1; build(lson); build(rson); PushUp(rt); } int update(int p,int rt) { sum[rt] --; if(tree[rt][0] == tree[rt][1]) { sum[rt] = 0; return tree[rt][0];//从绝对位置剔除 } if(p = sum[rt1]) return update(p,rt1); else return update(p-sum[rt1],rt1|1); PushUp(rt); } int main() { int n,m; scanf(%d%d,n,m); build(1,n,1); int pos = 1; int seq = 1; for(int i = 0 ; i n ; i++) { seq = (seq + m - 1) % sum[1];//seq 只是相对位置 if(seq == 0) seq = sum[1]; pos = update(seq,1); coutpos ; } return 0; }

您可能关注的文档

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档