我,从一个算法菜鸡选手到USACO全球前100的心路历程

 

分享人:西瓜

康奈尔大学计算机在读

USACO竞赛铂金级,排名全球前100

如果大家是抱着一周USACO拿大奖的想法来看的话,我这里没有你想要的东西。所有的学科竞赛都没有捷径,就算你天资聪慧,该走的路还是要走的,只不过比别人可能快一些,但是你该写的几万份代码,该看的几千份博客,其实一个都少不了。抱歉。
 
如果实在想要的话,睡了吧,梦里啥都有
 
我,从一个算法菜鸡选手到USACO全球前100的心路历程
01
因为一本搞定信息学竞赛的书而疯狂受挫
首先想分享一下我的学习进度。高一之前我参加了我们高中-成都七中的学科竞赛夏令营,在老师的建议下买了一本大概叫做《一本搞定信息学奥赛》的书,翻了几页,然后就开学了。
高一开学的时候,我可能刚刚看完最基础的for循环,基础的就等于啥都没有。看这几页的时候,我还写了一两个非常简单的1+1加到10这种代码,总的来说还是比较喜欢这种不用自己干活可以偷懒的感觉
 
我,从一个算法菜鸡选手到USACO全球前100的心路历程
高一开学之后,我们每周五会有一个兴趣班,两个小时我全部上的是竞赛,周六是全天从早上8点到下午5点这样一个时间段,讲座+考试+分析题目,全程都待在学校。
这种情况其实只持续了半年,因为高一上的时候,我们老师听说我在暑假看了书,以为我比较强,就把我扔到了一个很难的班,然后进行疯狂受挫
 
我,从一个算法菜鸡选手到USACO全球前100的心路历程
 
 
02
持续半年的零分状态
我高一结束的时候,其实不是很厉害,因为确实题目的练习量不是很高,虽然说我们高一结束就已经讲完了考NOIP会需要的所有知识,但是因为练习的不是很够,所以分是上不去的
 
我高一这一年过的比较艰难。CS程序是只要你有任何一个步骤,任何一个字符写错了,它都不会跑下去,不跑下去就意味着你是0分。这种0分的状态我大概持续了可能真的有半年,一共三道题,满分300分,每次考试三个半小时,每一次考试出来都是0分,那段时间其实是非常的受挫折,但确实是很喜欢这个东西,所以也就在竞赛班赖下来了。
 
我,从一个算法菜鸡选手到USACO全球前100的心路历程
赖到后面的话,慢慢就会发现,我这次考试可能有个10分,有个20分了,然后再到后面,诶,我有个五,六十了,其实高一这一整年是一个非常漫长也非常痛苦的状态。
03
连三等奖都无缘的困难群众
高一11月份的时候我考过一场NOIP,就是国内算法竞赛的入门级考试,这一次我什么奖都没有,按理说是不应该出现这个情况的,因为只要你哪怕只有10分,你都是个三等奖。但是我当时没有拿到奖的原因纯属意外。
 
当时班上是6个学生,三个学长给我们讲课,因为别的同学都很强,就没有考虑到像我这种困难群众,没有给我讲所有的程序开始之前都有一个输入输出的语句,相当于说如果不加这一行代码的话,测评的程序是没有办法来测试我的程序的,然后我所有的代码都没有加这一行,就是说我所有代码都跑不动,然后连最基础的三等奖都离我远去了。

我,从一个算法菜鸡选手到USACO全球前100的心路历程

04
零分选手到USACO铂金全球前100!
 

我,从一个算法菜鸡选手到USACO全球前100的心路历程

进入高二之后,我从10月份开始停课一个半月准备NOIP,周一到周六全部待在机房,这一段时间我觉得是我收获最大的一段时间。因为每天呆在机房的环境下,和我一起停课的同学是我们学校专门选出来竞赛很强的同学,在这种环境下,也对自己有一个鞭策的作用,因为你会发现自己和别人差得很远,这个差距已经大到了不是很能接受的地步。
对我来说的话,如果我发现我和周围同学差得很远的话,我真的会非常努力。从最开始的每天最多只能写一道题,得100分或者100稍微低一点点,到最后我每天基本上能写两道题,得一百七八分了。再后面,大多时候第3道题也可以再做一些的。

总的来说,其实这一个半月学了很多,而且
重要的是之前学过的东西,在这一个半月高强度的训练下去,去真正的熟悉它,然后去掌握它,去慢慢的了解掌握知识
这段时间之后,我又考了NOIP,成绩还是很差,二等奖。
 
我,从一个算法菜鸡选手到USACO全球前100的心路历程
一个部分是和平时训练形式有关,就是NOIP你只能提交一次,它测出来是多少分你就是多少分,但是我们训练的时候,很多时候我测了之后有bug,我改一改最后发现还是过了,我就会觉得其实我这道题是做出来了的 ,但是在考试的时候不是这样的,他不会再给你一次机会让你改一改再去测一次。

第二个原因其实还是一些自身能力的问题,因为毕竟我真正开始很大量的练习这些代码也只有一个半月的时间。

虽然NOIP考得很差,当时给了我很多的挫折,但我并没有放弃竞赛的学习,因为我觉得我可以拿到一个更好的成绩,自己付出这么多,结果不应该是这样,所以我后面接着去打了USACO的比赛。
高二12月份的时候,我进了USACO的黄金,然后1月份打进铂金,2月份的时候打出了我一个非常满意的成绩(小编说:也就是铂金级全球排名前100这样的成绩)。这一段时间成绩有长进,其实是因为知识都是之前已经学过的东西,NOIP考完之后我虽然没有去学校,但是在继续折腾这些已经学过的东西,反复的练习,同一个数据结构会写很多遍,直到我完全掌握。

 

 

05
学习两年CS,信息学竞赛对我的帮助
 
1. 普通编程的入门。因为国内也没有太多相应的CS教程,所以唯一有接触的话,其实就是接触竞赛了,你大概写那么一两个代码,或者说你稍微把算法学习一下,去看一些非常基础的算法之后,大概能感受到自己到底喜不喜欢这个东西。
2. 算法的入门。计算机科学确实是一个科学的学科,很多东西是非常理论化的,理论的东西其实就是算法的一个基础入门。大家如果后面想去学比如Computer Science的东西的话,算法的入门真的非常重要。而且就算你去做一些工业化的项目,CS其实还是非常基础的。
🌟 这里我想强调一下Computer Science计算机科学和编程的区别。CS其实教的是理论的东西,比如数论,图论,比较简单的博弈,范畴集合论这些偏数理化的东西。编程的话,其实在大学课程中,如果你不愿意涉及到这些板块,你可以走一些非常工业化的规划,稍微牺牲一下算法上的时间,保证它的效率或者稳定性之类的。其实真正的programmer就是写代码的人,他的算法不需要特别的强。所以这两个的区别其实就是理论和应用的一些区别。
 
我,从一个算法菜鸡选手到USACO全球前100的心路历程
 
3. 去发掘一个信息点,如果你有了基础的编程能力之后,想去深入的研究一下,像网络相关,网络安全,或者编程的理论、计算机相关,甚至软件开发、机器学习,在有了基础的编程能力之后,再去做这些研究相对来说会容易一些。
🌟 其实语言的话还是存在一定互通性的,我第1个入门语言是C++,之后因为有一些项目的需要,后面还去学了一些简单的Java,Python,甚至JavaScript,USACO在你有C++基础之后,相对来看都会简单很多。
从我申请的角度来谈看,NOIP和(USACO)Platinum它其实有一些细微的差距的。
因为如果你的竞赛能走到NOI的级别的话,相对于国际上的学校来讲,这个奖的知名度和认可度会稍微高一些。但如果只有NOIP的话,他们可能就没有这么熟了,反而会觉得USACO的Platinum的可信度是高一些

 

 

06

给要入坑的学弟学妹的一些建议
1. NOIP和USACO的铂金组都是属于竞赛级别了,这意味着你需要花大量时间来投入。我之前也有和Rock老师聊过,大概200个小时可以到黄金。我每周备赛时间是10个小时,学了一年,一年是50周,其实就已经500小时的课程量。
 

我,从一个算法菜鸡选手到USACO全球前100的心路历程

USACO相对来说好一些,因为在Gold级别之前就是基础的入门。就NOIP如果换算到铂金组的话,你在黄金组之前其实就是一个非常基础的算法了解,它甚至和竞赛没有任何关系。
2. 如果大家是决定了想学CS,或者已经开始准备了,USACO铜组银组的内容是无论学什么CS,比如你去当一个写码的programmer,或者你去做算法,做机器学习,做任何东西都要学习的东西
3. 尽早的去了解自己到底适不适合这个东西。因为CS其实在美国还蛮火的,火的原因一部分是因为他工资很高,但换句话说,它也不是每个人都能做的。如果每个人都能做的话,他也不会这么火了是吧?所以大家可以尽早的去了解一下。如果自己在算法方面走得还不错的话,相对来说计算机科学或者以后的算法相关的机器学习,这些东西是会稍微容易一点的。
 
我,从一个算法菜鸡选手到USACO全球前100的心路历程
我在康村观察到许多大一工程学院的学生,表明了要学CS,但一半多的学生,最后没有在CS走下去。一个可能是因为康村CS确实还是不错,讲的还是挺难的,第二个是很多人没有基础,他并不清楚到底适不适合这个东西,试了这么半年甚至一年或者一年多的时间,他才会发现,其实我真的我上不下去这课,最后再来换专业的话,其实是很花时间的。
4. 如果你确定要继续往下走的话,从黄金走到铂金的时候,你甚至进NOI的话,在你申请学校的时候,你才有可能会申请到一个CS专业排名来说,相对来说不错一点的学校。
5. 单从效率上来讲,我觉得USACO总体来看,肯定不是你对申请来说投入产出比最高的一个。因为我之前已经给大家算过的,时间投入真的很大了。但是天下没有白吃的午餐,你越容易拿到这个东西的话,它的含金量就越低。它的含金量越高,可能就越困难,这是一个tradeoff。
 
我,从一个算法菜鸡选手到USACO全球前100的心路历程
 
大家根据自己的情况,需要选择一些东西,如果你发现自己确实不适合,或者时间不够的话,用这些时间去拿一个建模比赛的奖,其实也不是不可以。毕竟申请的话,那10个奖里面不说填满了,好歹还是得填7个,建模这个奖有什么用,我确实不清楚,但有一个肯定比没有好吧。

我,从一个算法菜鸡选手到USACO全球前100的心路历程

转自:https://mp.weixin.qq.com/s/oGHa48f5hSTjOvzWxIN-uA

《挑战程序设计竞赛》推荐及算法相关书籍吐槽

前几天,秋叶拓哉(iwi)、岩田阳一(wata)和北川宜稔(kita_masa)所著,我(watashi)、庄俊元(navi)和李津羽(itsuhane)翻译的《挑战程序设计竞赛》,终于通过人民邮电出版社正式出版了。可喜可贺,可喜可贺。有关该书的简介,目录、试读和购买链接请通过传送门访问。这里我主要想说一下自己为什么要翻译和推荐本书,还有对程序设计竞赛学习资料的一些看法。也附带一些对译者序和第1章的补充说明。

在译者序中我也略谈到了自己翻译此书的动机。和很多读者一样,最开始当然是奔着作者的名头去的,三位作者不但是国际知名的选手,而且TopCoder的最高rating加起来都破9k了。顶尖实力的作者往往可以站在更高的高度指点江山,也就更可能写出一本好书。随后就是读到书中的内容了,书中的绝大多数东西,我大概都在过去四五年时间的摸爬滚打中,逐步通过各种书籍、网络、道听途说、解题经验和总结体会掌握了。不过还是有一些耳目一新的内容,其中有一两个问题还是通过邮件得到了原作者的解答,涨了姿势。但仍有一种相见恨晚的感觉,假如自己早两年读到此书,想必能少费不少劲。从我个人的经历和对周围同学的了解来看,这是一本非常值得引进和推荐的书。

当然,在此之前国内已经出版有不少算法竞赛相关的书籍了,很多人想必希望知道这本书有什么特别之处。算法竞赛相关的书籍大致有两类,一类是算法和数学类的书籍,比如各种数据结构教材、离散数学教材、《算法导论》、《具体数学》等,一类是专门针对算法竞赛的书籍,其中的代表就是刘汝佳所著的几本书,而《算法艺术与信息学竞赛》(黑书)又是其中的代表。作者之一的iwi在MSRA实习期间也得知了黑书的大名。

首先,个人觉得这些书籍大致可以分为两类:教科书和工具书。诸如《数据结构与算法分析》(DSAA)之类的书可以作为教科书的代表,而诸如《计算机程序设计艺术》(大名鼎鼎的TAOCP)则毫无疑问是工具书的代表。大致地说,前者简单易懂,适于学习,后者高深全面,适于参考。二者并没有明显的分界线,很多时候全凭主观,因人而异。比如说,看懂了,这就是教科书,看懂目录了,这就是工具书。当然,和数学沾边越多的书,总是越难啃的,所以就难度而言,这类书籍和编程语言类书籍自然是没有可比性。

许多书都作为程序设计竞赛的学习资料被反复推荐,但事实上,我们大概可以仿照《最常被程序员们谎称读过的计算机书籍》写一篇《最常被ACMer们谎称读过的书籍》的吐槽文。里头有一句话很重要,所以我再抄一遍:“如果你自己没有读过这些计算机书籍,请不要推荐给别人”。当然,像《算法导论》这样的书个人觉得还是值得一读的,多数的章节并不难,可以当作教科书,后面的一些内容可以作为工具书需要时再参考,里面很多东西讲的很细,容易做到真正的理解吸收,比如从自动机引出KMP等等。而TAOCP则无疑是最常躺枪的装逼神器。有一天,我在同学的桌上看到一本TAOCP第一卷,打开一看很黄很暴力,我赶紧就把它盖上了。TAOCP很厉害,看exponentiation by squaring能引用到它,看permanent也能引用到它,连看数え上げお姉さん都能引用到它。读完TAOCP那必须能变得超厉害了,可那得是能读完啊,读不完说啥都白搭。所以推荐学习资料不能光看书好不好,还得看对目标人群合不合适。而一本好的教科书,不应该是尽可能体现作者有多牛,而是要能够尽可能简单地帮助读者变得更牛。如果看完了,懂的还是懂,不懂的还是不懂,那是没有意义的。

按照这个分类标准,个人觉得《挑战程序设计竞赛》是一本很好的教科书。它非常的适合作为有志参加程序设计竞赛的同学自学,或是正在学习数据结构与算法分析的读者作为练习和拓展的参考书。该书将不同的主题按难度分成了三部分,循序渐进。作为教科书,其一个明显的特点是,几乎没有外链,把每个的主题都讲得很清楚,便于读者理解。多数题目附有核心代码,代码风格也不错,而且讲解的时候会附带一些思路的说明和方法技巧的总结。它在正文中详细完整的介绍了在程序设计竞赛中最重要的知识和思想,全书涵盖了在绝大多数题目中所会用到的知识和思想。而对于拓展内容则以补充说明或是附录的形式给出,并未多做介绍。这样的好处是该书很连贯,结合练习容易完整掌握,并突出了对大多数人而言更为重要,应该多花力气的地方。

在此举几个例子。书中介绍一般图匹配的时候并没有介绍经典的带花树实现,而是介绍了利用Tutte矩阵求匹配数的随机算法。因为要在书中真正把带花树的实现给读者讲清楚很困难,而对Edmonds算法的介绍资料也很多。在介绍后缀数组的时候,用的也不是线性算法,因为后缀数组最重要的是理解其性质和应用,而求后缀数组往往是模板的工作。在介绍字符串上的动态规划算法的时候,没有介绍KMP算法和Aho-Corasick算法,而是用暴力的方法求出了二者所对应的状态和转移,事实上这反而更有助于真正理解KMP算法和Aho-Corasick算法。

另一方面,如果你是想要学像弦图、动态树、Dancing Links(DLX)之类的高深玩意的话,这本书对你就几乎没有任何帮助。当然,说到DLX,我不知道为什么国内会曾经有一段时间盛行出DLX的题,题目的规模大得惊人,能AC的原因却是因为数据太水。真正理解DLX的人应该明白,这本质就是一个常数优化的启发式搜索,并不能改变问题本身的困难程度。从某种意义上说,在把基础搞扎实前,还是少折腾这些高深玩意比较靠谱。

相比较而言,刘汝佳的《算法艺术与信息学竞赛》则介于教科书与工具书之间。书中按专题介绍了了相当多的知识,从头到尾许多小节都涉及到非常难的内容,还有一些神题。书中所提及的算法和数据结构要比《挑战程序设计竞赛》多得多,特别是计算几何部分要更为系统详细。书中包含有大量的外链,非常可惜的是OIBH早在多年前就挂掉了。书中对很多问题进行了总结归纳,但不都有详细的讲解介绍,对于身经百战的读者很容易找到共鸣,但对于其他读者而言,恐怕读起来就不那么轻松了,很多地方需要自己钻研,另找资料学习。黑书是可以多读几遍的书。起初可以在短时间内接触大量的算法和技巧,然后通过其他资料学习。遇到某个有印象的问题,或时隔一段时间后,可以再翻开看。慢慢地,就会对书中越来越多东西有共鸣了。

当然,从最初阅读《算法艺术与信息学竞赛》,到去年翻译《挑战程序设计竞赛》,我自身的实力也已经不可同日而语了。所以上面对于两书的评价,当作两个不同的人做出的应该会更为客观一些。

冰冻三尺非一日之寒。虽然书中的内容已经足以让读者的rating冲上2500,但真要达到2500的实力却还离不开充足的训练,通过实践把书中的内容真正化为己有。另一方面,训练的方法也是很重要了,好的方法能够做到事半功倍。正如《挑战程序设计竞赛》最开始所说的:程序设计竞赛是综合了以下两个要素的复合竞赛:

  • 设计高效且正确的算法
  • 正确地实现

并且,为了设计算法:

  • 灵活的想象力
  • 算法的基础知识

也是必不可少的。平时训练过程中切莫顾此失彼。


Q&A

Q: 能找作者/译者签名么?

A: 如果我们有机会见面的话,而且你居然还不嫌我的字丑的话,是可以的。由于我和另外两位译者马上就要分处三个不同的城市了,能不能集齐就得看RP了。如果你参加今年的TCO的话,我们到时候还可以去搭讪iwi和wata要签名。

Q: 卖出一本书你能抽成多少?

A: 0. 我们拿的是一笔稿酬。所以如果你买书的目标是给我钱的话,不如直接一点,打开支付宝。我会很开心的。

Q: 为什么黑Knuth?

A: 呃,虽然文中黑的两个东西全是Knuth搞的,但我绝无黑Knuth的意思,恰恰相反,我黑的是那些亵渎Knuth作品的人。比如建议你想要进某社先把TAOCP读个几遍啊,或者把DLX当万金油使的这类人。

Q: 《具体数学》怎么样?

A: 说来这又是Knuth搞的东西?《具体数学》可以算不怎么简单的教科书。里面许多内容还是可以看得津津有味的,但是有些地方就看着有点费劲了,里面那两页求和公式“简单的例子”当初可看死我了。《具体数学》系统地介绍了许多有用的数学工具,当你遇到过几类数学相关的问题,并开始觉得自己不会数数,不会算概率的时候,就很有看一看的必要了。

Q: 更上一层楼的练习方法。

A: 《挑战程序设计竞赛》也有这么一段,这里做一个补充。一是近年来Codeforces得到了很大的发展,其功能丰富,用户群也很大,是一个很好的练习平台。二是SGU也是一个老牌的OJ,其题库比较精简,且质量比较高,不会像其它OJ有刷不完的题,因此比较推荐。学习算法的时候,可以找一些相关的题做,巩固知识。练习的时候,不应该跟着解题报告做题,而是要尽量独立思考,否则“灵活的想象力“恐难有提高。同样的,不要在“神模板”和“神题”上走火入魔,而忽略了“算法的基础知识”。

转自:http://blog.watashi.ws/2382/pccb-etc/

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

截至美东时间周二上午8点,US Open赛结束,至此,USACO 2019-2020赛季正式落下帷幕。满分同学会当场晋级,没有当场晋级的同学可以耐心等待一周之内出成绩。

铂金级满分通过记录(最高级别

【福利】独家首发USACO 3月赛US Open全部组别赛题解析
【福利】独家首发USACO 3月赛US Open全部组别赛题解析
【福利】独家首发USACO 3月赛US Open全部组别赛题解析

本次US Open赛事题面非常与时俱进,奶牛的世界也爆发了新冠病毒COWVID-19,如有的让你帮忙计算社交距离,有的让你帮忙追踪0号病人(牛),出现了不少高质量的题目。更多内容,请参考下文解析。

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

以下内容是四大级别的赛题解析,供同学们参考交流。想要咨询参赛和备考冲刺计划的同学,可以扫描文末二维码,添加老师微信获取。

 

(题解内容为图片,可点击放大查看)

 

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

01 Social Distancing I

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

02 Social Distancing II

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

03 Cowntact Tracing

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

01 Social Distancing

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

02 Cereal

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

03 The Moo Particle

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

01 Haircut

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

02 Favorite Colors

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

03 Exercise

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

01 Sprinklers 2: Return of the Alfalfa

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

02 Exercise

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

03 Circus

题目大意

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

题目解析:

【福利】独家首发USACO 3月赛US Open全部组别赛题解析

2019-2020赛季

往期题解

【福利】全球首发USACO Dec月赛全部组别试题解析

【福利】独家首发USACO 1月赛全部组别试题解析

【福利】独家首发USACO 2月赛全部组别赛题解析

USACO 2020 US Open赛题解析

 
截止到今晚8:00

USACO 2020 US Open已经结束了,

不知道同学们考的怎么样呢?

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

理工君第一时间帮大家整理了
这次竞赛的赛题以及独家解析
文章末尾还有完整版的赛题参考代码
希望对Farmer John和他的Bessie,
以及你们(当然最重要的是你们)
有所帮助!
 

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

Bronze赛题

01

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
这道题我们将所有的空隙挖出来,考虑所有的情况即可

02

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
首先我们要找出题目中R的最大值

R表示疾病的传播半径 如果两个人距离小于R即会被传染

我们发现如果相邻的两个人 一个人传染一个人不传染 那么R不应该大于这两个人的距离

当求出最大的R以后 我们即可求出答案

03

 

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
枚举零号感染者和K即可

Silver赛题

01

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
经过观察 我们发现题目所求的D具有单调性

即D越小越容易符合题意

二分答案即可

02

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
我们从后往前插入

然后每个数只会挪动两次位置

所以总体复杂度O(n)

03

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
我们按将x和y从大到小排序

然后确保了 后出现的x更小

然后进行块合并即可

Gold赛题

01

 

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
我们从小到达的插入数据

我们发现 当我们插入一个数时 前面还没有插的位置 此后一定比当前数大

所以使用树状数组统计即可

02

 

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
这是一个并查集问题

我们发现一个点的儿子都需要合并

我们假设x y需要合并 那么他们的儿子也需要合并 这个过程时O(n^2)的

我们可以用类似spfa的技巧将这个过程优化到O(n)或者启发式的思想优化到O(nlog(n))

03

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
考虑每个素数的贡献

计算答案即可

 

Platinum赛题

01

 

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
我们发现一个我们的轮廓线每弯折一次 那么就会有一个点被确定

我们dp即可

我们设计dp[i][j][0..1]的状态

dp[i][j][0] 表示从dp[i – 1][j]即从上面转移的方案数的和

dp[i][j][1] 表示从dp[i][j – 1]即从左边转移的方案数的和

进行转移即可

我们在状态中只考虑当前轮廓线的最后一个点和到达最后一个点的方式

通过这样的方式消除前效性

02

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
赛题解析
USACO 2020 US Open赛题解析|Farmer John说让你点进来看看
对于一个排列,循环节为t,出现p次,贡献t^p,因此目标是统计每种循环节的出现次数

由于循环节范围太大,对t分解质因数 t = p1^q1 * p2^q2 * … * pk^qk 贡献可以分解成质因数p的q次方的贡献。

p的q次方的贡献 = q次p的贡献  因为p^q除1外刚好q个约数,可以等效算q次p的贡献

统计循环节是p^q倍数的排列数 = N! – 循环节没有p^q倍数的排列数

循环节没有p^q倍数的排列数 可以用动态规划解决

03

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

USACO 2020 US Open赛题解析|Farmer John说让你点进来看看

 

信息学奥赛NOIP,USACO参考图书

  • 刘汝佳系列
  • 《算法竞赛进阶指南》- 李煜东
  • 《啊哈算法》- 纪磊
    面向初学者或有初步兴趣的人群,有幽默配图。
  • CCF 中学生计算机程序设计系列
    • 《CCF 中学生计算机程序设计 – 入门篇》- 陈颖,邱桂香,朱全民 建议配合勘误使用。
    • 《CCF 中学生计算机程序设计 – 基础篇》- 江涛,宋新波,朱全民
    • 《CCF 中学生计算机程序设计 – 提高篇》- 徐先友,朱全民
    • 《CCF 中学生计算机程序设计 – 专业篇》(未出)
  • 一本通系列
    • 《信息学奥赛一本通》- 董永建
    • 《信息学奥赛一本通 – 提高篇》- 黄新军,董永建 建议选择性阅读。
    • 《信息学奥赛一本通 – 高手训练》- 黄新军,董永建
  • 其他由国内著名 OI 教练写的教材
    • 《信息学奥赛课课通》- 林厚从
    • 《聪明人的游戏:信息学探秘 – 提高篇》- 江涛,陈茂贤
    • 《计算概论:C++ 编程与信息学竞赛入门》- 金靖
    • 《算法竞赛宝典》- 张新华
  • 《算法竞赛入门到进阶》- 罗勇军,郭卫斌
  • 《算法导论》第三版 – Thomas H.Cormen/Charles E.Leiserson/Ronald L.Rivest/Clifford Stein 黑书,大学经典教材。英文版原名_Introduction to Algorithms_
  • 《具体数学》第二版 – Ronald L. Graham/Donald E. Knuth/Oren Patashnik 英文版原名_Concrete Mathematics_
  • 《组合数学》第五版 – Richard A.Brualdi 英文版原名_Introductory Conbinatorics_
  • Competitive Programmer’s Handbook
  • 《挑战程序设计竞赛》全套 – 秋叶拓哉,岩田阳一,北川宜稔 通俗易懂。
  • 《算法概论》- Sanjoy Dasgupta/Christos Papadimitriou/Umesh Vazirani 提纲挚领,但内容较少。
  • Legend-K 的数据结构与算法的笔记
  • acm-cheat-sheet
  • Competitive Programmer’s Handbook – Antti Laaksonen 作者花了三年个人时间完成。面向算法竞赛,覆盖面广,详略得当。

比较典型的例子大概是《算法竞赛入门经典:训练指南》(以及本篇第二版的最后一章)《算法竞赛进阶指南》。*CLRS* 有必要看吗?我想是没有的。倘若在意细致的代价分析,看《具体数学》就足够了,数论、组合数学和动态规划顺带也一起学了。*TC++PL* 呢?如果你在意 STL、algorithms 的复杂度,第四部分:标准库可以当作 cookbook。这样一本暗示你具体实现较少的书,以及它适用的版本,我觉得都是比最流行的 Primer Plus 第六版好的。
现在网络上的资源是很多的。hzwer 发起的的 shareOIOI WikiLojUoj、洛谷的集训队 50 题。这些是集合的比较有趣的。比 *CPC 的资源有序得多。

这些就足够了。它们足够深入浅出;足够连续、也足够离散。

最最入门的书我推荐《计算概论》,华东师范大学第二附属中学的。