国家集训队作业xmas解题报告.pdfVIP

  1. 1、本文档共6页,可阅读全部内容。
  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文档。上传文档
查看更多
W erCamp2003 《xmas》解题 许智磊 题目 见xmas.doc 。 题目要素 初看本题,有以下几点值得注意: 1. A 盘上环形分布着N 根针,它们的长度为1~N 之间的整数且各不相同, 这是已经知道的;B 盘上环形分布着N 个孔,它们的深度为1~N 之间 的整数且各不相同,这是没有 知的。 5 ——A 和B 都可以看作1~N 的一个排列。其中N=10 。 2. A 盘可以 地旋转,也就是说可以对排列A 作循环。且总存在一种 旋转的方式使A 盘的每根针正好可以完全 B 盘的孔里而不会露在 外面,使得两个盘贴紧。也就是存在一种循环的方式将排列A 变为排 列B 。 ——A 和B 是“循环同构”的。 3. 可以将A 盘压向B 盘(称为Drop )。每次压下之后,如果两盘贴紧, 那么程序自动退出,否则会返回 A 、B 盘之间的距离,也就是每根针 的长度减去所对孔的深度的最大值。要求在5 次之内将两个盘贴紧。 ——要设法利用排列A 以及若干次压下的返回值来确定排列B 。 看起来,可以利用的信息不多,这是一道有难度的交互式题目。 初步分析 由于排列A 和B 是循环同构的,因此首先可以判定排列B 只有N 种可能的 5 情况,也就是排列A 的0 次,1 次……(N-1)次循环,显然,最多可以有10 种。 5 的问题就是要通过最多5 次的Drop 把这最多 10 种可能情况筛到 唯一的一种并返回,平均每次要筛掉9/10 以上,这看起来是一个严峻的 ! 于是 首先想到:一定要充分利用到Drop 的返回值,尽量苛刻地筛掉那 些不可能的情况。怎样筛呢? 可以这样做: 定义dis(A,B)=max{Ai-Bi} ,也就是排列A 到排列B 的距离等于A 的每个元 素减去对应的 B 的元 差的最大值,也就是题目中所说的两个圆盘之间的距 离。首先算出排列A 到所有可能的排列B 的距离,并保存下来。 用一个线性表保存所有可能的排列B 的情况(只需保存是A 的几次循环即 可),每次选择其中的一个,设为A 的X 次循环,让A 转动到这种情况,执行 Drop ,如果两个盘贴紧,那么就成功了,否则的话,依次 当前所有的可能情 况,判断是否符合这次Drop 的结果d 。判断方法为:设当前 的排列B 为排 列A 的Y 次循环,那么就看排列A 到排列((Y-X+N) mod N) 的距离是否等于d , 如果不相等,说明这个情况不再符合目前得到的事实,应该筛去。 这样一直筛下去,总有一次执行Drop 时会是排列A 转动到正确的排列B , 这样一定可以正确出解(当然,这是说Drop 调用不超过5 次的情况下)。 这个算法效果如何呢?它基本上完全利用到了每次Drop 的结果,因此 不用再多考虑它的调用次数问题——因为即使不能在5 次内出来,也只能抱怨我 们运气太差,算法上很难再有所突破了。 但是它的时间复杂度实在是太高了,因为它需要一个预处理来计算排列 A 到所有N 个可能的排列B 的距离,而每次计算的复杂度是O(N) ,所以预处理的 2 5 复杂度为O(N ) ,而N

文档评论(0)

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

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

1亿VIP精品文档

相关文档