POJ1012结题报告POJ1012结题报告.pdf

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
POJ1012结题报告POJ1012结题报告

Joseph Joseph JJoosseepphh --POJ1012 --POJ1012 PPOOJ 解题报告 by Oak Wesley Joseph 这是Joseph环的一道变种题! JJoosseepphh � 懂了 Joseph是什 么后,还犹 豫什么呢, 赶快AC掉! Description : Description DDeessccrriippttiioonn 设想有k个好小孩和k个坏小孩围成一个 约瑟夫环,编号从1,2,3…2k-1,2k,其中前k 个是好孩子,后k个是坏孩子,然后要求从 1至m报数,每次报到m的人出局,现在的 任务是求得最小的m,要使在第一个好小孩 出局之前有k个坏小孩子已出局,即开始出局 的前k个均为坏小孩。 问题分析: � 首先可以从问题描述中得到这样一个信 息,k值被限制在了0k14中,粗看似乎觉得问 题规模并不大。在从时间来看:Time Limit: Time Limit: TTiimmee LLiimmiitt:: 1000MS 。由此不难觉察,此题的陷阱可能会落在 超时上。这里还必须明白一点,m的值可能远远 大于k。k的个数是极其有限的,对应m的值也就 为有限个。故而这题的求解耗时就落在了求解m 上。 对于这种小规模输入,求解极其费时的题还 犹豫什么呢? �老老实实打 表吧! why? why wwhhyy � 如果说输入的数据只有像提供的那几 组,当然这是不会超时的。然而不幸的是 服务器那端提供几百几千组数据来测试你 的程序,相当于你的程序在反复执行同一 复杂的过程。为何不把这有限次的运算结 果都先算出来,存入数组中,来接受他无 数次的检验呢? 现在分析一下怎样求 吧! m m mm � 假设初始时Joseph环中的总人 数2k人,为方便起见把环中的人从 0开始到2k-1编号,Curr为当前环 中的总人数,现在的任务是报k次 数,每次出局的人编号均=k.再假 设一下吧,如果这次出局的人编号 是t,那下一个将是? 不错,如你所想: � 就是(t+m-1)%Curr。想想,这是不是 最笨的办法啊。把m从k开始,每加1就测试 一遍符不符合题解,符合即为所求解;不 符合,则进行下一次尝试。-1是因为t也是 算内的! 测试 是否符当前的 ,代码: m k � bool Test(int k,int m){ � int i,t=0,Curr=2*k;//Curr为当前Joseph环中的总人数 � for(i=1;i=k;i++) � { � t=(t+m-1)%Curr; � Curr--;//Joseph环中的人数减少一个 � if(tk)//如果说出局的编号在前k个,即好小孩,对 k m 于此时 的 是不正确的 �

您可能关注的文档

文档评论(0)

vshoulrengb3 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档