网站大量收购独家精品文档,联系QQ:2885784924

[小学作文]顾昱洲+题目分析.ppt

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

IOI2012 南京师范大学附属中学 顾昱洲 题目形式 提交答案题:odometer 交互题:supper 这里的“交互题”指IOI从2010年起出现的一个题型,即写两个程序,第一个程序处理读入的数据,第一个程序的输出(有各种限制)交给第二个程序处理,并由第二个程序输出需要的结果 交互性质的传统题 形式上为传统意义的交互题 但是实质为传统题 交互性质使得大部分题目都必须在线 捆绑测试 每个Subtask必须通过所有测试点才能得分 几乎杜绝骗分可能 D1P1 odometer Leonardo的卵石里程表 2名选手获得满分 非常规的提交答案题 (非常规的传统题:WC 2008 超能纸带机) odometer 为一个256*256的棋盘上的一个机器人编程完成给定的任务 每个格子包括最多15颗石子 (重要条件!) 坐标范围0..255 机器人占据一个格子,初始时在(0, 0),面朝北 基本命令 left – 左转 (不改变位置) right – 右转 (同上) move – 前进 (若前方为边界,则命令无效) get – 从当前格子中去掉一颗石子 (若格中无石子,则命令无效) put – 向当前格子加入一颗石子 (若格中有15颗石子,则无效) halt – 结束程序 流程控制命令 用L表示任何合法的标号 jump L – 无条件跳至L处 border L – 若前方为边界,则跳至L处 pebble L – 若当前格子有石子,则跳至L处 L: – 声明标号L;并非命令 评分依据 程序长度(PS) – 去除注释、空行、标号声明后的总行数 运行长度(EL) – 程序运行至结束总共处理的命令的次数 Subtask 1 在(0, 0)及(0, 1)各有X个和Y个石子,其余格子没有石子。若X≤Y,程序结束时应停留在(0, 0),否则应停留在(0, 1)。 PS≤100,EL≤1000 思路 依次取石子,直到某个格子为空 例子 5 2 4 1 0 3 Subtask 2 在(0, 0)及(0, 1)各有X个和Y个石子,其余格子没有石子。若X≤Y,程序结束时应停留在(0, 0),否则应停留在(0, 1)。此时(0, 0)和(0, 1)中石子数应与初始时相同。 PS≤200,EL≤2000 思路 与Subtask 1类似 不同之处: 在(0, 0)中取石子后,放入(1, 0) 在(0, 1)中取石子后,放入(1, 1) 得到最终应停留的位置后,在(0, 2)中记录 将(1, 0)和(1, 1)中的石子放回原位 Subtask 3 初始时在(0, x)和(0, y) (x≠y且x+y为偶数)各有一颗石子。结束时应停留在(0, (x+y)/2)。 PS≤200,EL≤200000 思路 开始 找到第一个石子,将其右移一格 找到第二个石子,将其左移一格 若该格中有两个石子,跳至结束 跳至开始 结束 例子 1 1 1 1 1 2 Subtask 4 网格中总共有不超过15颗石子,将它们全部移动到(0, 0) PS≤200,EL≤200000 有部分分,EL≤2000000时,能得到32-32lg(EL/200000)分。 基本思路 对每行处理,将所有石子移到行首,然后对第一列重复该过程 开始 当前在行首 从前往后遍历该行 若有石子则将其移到行首,回到开始 结束时在行尾,回到行首,进入下一行 遍历顺序 常数优化 瓶颈在于遍历棋盘 移动石子时,原先的程序: 开始 判断是否边界,若是,则跳至结束 向前一格 跳至开始 结束 常数优化 优化后的程序: 开始 判断是否边界,若是,则跳至结束 向前十六格 (十六行) 跳至开始 结束 减少判断是否边界的次数,所有简单循环均可以进行类似的优化 Baby-Step Giant-Step 常数优化 “结束时在行尾,回到行首,进入下一行” 使用更短的遍历:每次处理两行 第一行每次从行首开始找石子,移到行首 第二行每次从行尾开始找石子,移到行首 这样,大部分格子我们只进行了一次判断是否有石子和一次移动 新的遍历顺序 Subtask 5 找到任意一个拥有石子数最少的格子。程序结束时停留在那个格子,且保持每个格子中石子数与初始时相同。 PS≤444,EL有部分分,PS≤444时,能得到28-28lg(PS/444)分。 思路 EL很大,基本可以无视,只需关注PS 回想子任务一,每次遍历棋盘取石子并判断 必须使用计数器记录当前取走了多少石子 但是这里,每个格子都可能为答案位置,不可能采用某个格子作为计数器 重要条件:每个格子内石子数不会超过15 枚举最小值 枚举最小值 (因为很重要所以说两遍) 思路 从0到14枚举答案x,每一次: 遍历棋盘 在该格去除x个棋子 若为空,跳至结束_x 否则加入x个棋子 实现细节 若最小值为

文档评论(0)

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

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

1亿VIP精品文档

相关文档