信息学竞赛之设计获胜策略.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?信息学竞赛之设计获胜策略?????一个好的取胜之道是制定在竞赛中指导你行动的策略。无论是在好的情况下还是在坏的情况下,它将帮助你决定你的行动。用这种方法你可以在竞赛中将时间花费在解决编程问题上而不是试图决定下一步该干什么…这有点像预先计算好你面对各种情况的反应。 心理上的准备也很重要。 竞赛中的策略 首先通读所有的题目;草拟出算法,复杂度,数量,数据结构,微妙的细节,… 集体讨论所有可能的算法 —— 然后选择最“笨”但却可行的算法。(注:请注意这一点,对参赛选手来说获奖就是唯一目的) 进行计算!(空间和时间复杂度,并且加上实际期望和最坏情况下的数量) 试图证明该算法错误(??原文是Try to break the algorithm)—— 使用特殊的(退化的)测试数据。 将问题排序:根据你所需付出的努力,将最“短”(从原文理解是指解决问题费时最短)的问题排在前面。(从“短”到“长”的次序为:以前做过的,容易的,不熟悉的,困难的) 编写程序解决一个问题 —— 对每一道题而言,一次一道题 确定算法 构造特殊情况的测试数据 写出数据结构 编写并测试输入子程序(编写额外的子程序来显示数据输入的正确性) 编写并测试输出子程序 逐步细化:通过写注释来刻划程序的逻辑轮廓 一个部分一个部分地填充并调试代码 完成代码使其正常运转,并验证代码的正确性(使用一般情况的测试数据) 试图证明代码错误(??原文是Try to break the code)——使用特殊情况的测试数据来验证代码正确性 逐渐优化——但足够了即可,并且保存所有的版本(使用困难情况的(即运行时间长的)测试数据来计算出实际运行时间) 时间安排策略和“故障控制”方案 ??? 制定一个计划决定在各种(可预测的!)故障发生时的行动;想象你可能遇到的问题并计算出你所希望做出的反应。核心问题是:“你何时花费更多的时间在调试程序上,你何时放弃并继续做下一题?”。考虑以下问题: 你已经花费了多长时间来调试它? 你可能有什么样的BUG(BUG是指程序中的错误)? 你的算法有错吗? 你的数据结构需要改变吗? 你是否对什么地方可能会出错有一些头绪? 花费较短的时间(20分钟)在调试上比切换去做其他别的事要好;但是你或许能够在45分钟内解决另一个问题(??原文是A short amount (20 mins) of debugging is better than switching to anything else; but you might be able to solve another from scratch in 45 mins.) 你何时返回到一个你先前放弃的问题? 你何时花费较多的时间优化一个程序,你何时放弃当前优化工作而切换去作其他事? 从这里考虑出去(??原文是Consider from here out)——忘记先前的努力,着眼于将来:你如何才能就你目前所有的抓住下一个小时。 在你上交你的答案之前列出一个校验表: 在竞赛结束前五分钟冻结代码?(??原文是Code freeze five minutes before end of contest?) 将所有的声明关闭。 将调试输出关闭。 确认输入输出文件名正确。 确认输入输出格式正确。 重新编译并再测试一次。 将文件以正确的文件名复制到正确的位置(软盘)。 提示和技巧 如果可以就用暴力法(即穷举法)解决 (注:居然将这条作为技巧,可见竞赛的目的就是获奖,为此要“不择手段”。) 键索引顺序搜索(KISS= Keyed Indexed Sequential Search):简单就是聪明!(??原文是KISS: Simple is smart!) 提示:注意限制(在问题陈述中指明) 如果可以给你带来方便的话就浪费内存(假如你能侥幸逃脱处罚的话) 不要删除你额外的调试输出,将它注释起来 逐渐地优化,足够了即可 保留所有的工作版本 从编码到调试: 空白是好的(??原文是whitespace is good) 使用有意义的变量名 不要重复使用变量 逐步细化 在写代码之前先写注释 有可能的话尽量避免使用指针 避免使用麻烦的动态内存:静态地分配所有的东西。 尽量不要使用浮点数;如果你不得不使用,在所有使用的地方设置允许的误差(绝对不要测试两个浮点数相等) 对注释的注释: 不要写得太长,简洁的注解就可以了 解释复杂的功能:++i; /* increase the value of i by 1*/ 这样的注释是毫无意义的。 解释代码中的技巧 将功能模块划定界限并且document (??原文是Delimit document functional

文档评论(0)

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

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

1亿VIP精品文档

相关文档