「我准备过来了,你可以了吗?」

手机上再次传来了讯息,而这一次就是瑾茕发过来的了。

「可以了」

「那我现在过来吧」

在客厅中稍微等了一会儿后,天语便听到了门外传来了敲门声。

「哈啰~」

「哈啰」

门外正是手抱着手提电脑,静静地等待着的瑾茕。

她一个小时前回家时所穿着的校服,现在己经换成了便装,是常见的短袖衬衫和长裤。然后平常绑着的马尾也散了下来,略卷的头发披在了肩膀的两侧,额前的浏海也梳理得整整齐齐。

即使是自己也能够看得出来,这一次她是提前稍微装扮过后才过来的,和昨天来到的时侯略有不同。

(挺可爱的)

内心瞬间涌上了这个想法。

走进屋子里后,瑾茕便脱下了鞋子,穿上了天语帮她提早准备了的室内拖鞋。

「今天也要麻烦了」

「麻烦倒也是不会…但为什么你会一脸兴奋的样子?」

天语望着她那一进到门口后便开始闪闪发亮的眼睛,便忍不住问了出来。

「有吗?」

「十分明显」

「唔…应该是因为想着今天就能把题单里的题目都做完,然后你就会教我新的东西了」

「原来如此」

稍微理解到她会如此期待的原因了。

话说不知不觉间,瑾茕也快要完成了自己给她的那一堆题目了,明明就只是经过了一个月多一点的时间而己。原本自己其实觉得她什么时侯做完也没关系的,可能会拖到几个月甚至一年去完成。

毕竟不是每一个人都会把大部份时间放在写程式上,既然己经是高二学生了,把时间专注在课业上才是大多数人的选择。

但瑾茕的确挺喜欢OI的,而且看起来她还没转校过来前,自学的那段时间也学得十分认真。所以在做题单里的题目时进度才会这么快。

「而且,你也说过之后要学的东西会十分有趣,我可是十分期待哦」

「这个的话倒是因人而异,我是会觉得比起基础的知识要更有趣,只是不知道你会觉得怎样」

「反正你教我的时侯,就可以知道了」

「也是」

两人走到房间后,瑾茕像昨天一样坐在了桌子的一旁,而天语就坐在了她的旁边。

「我没有记错的话,剩下两题都不难」

「嗯,我来之前也稍微看了一下题目。应该就是普通的树链剖分,但是就是将树上的边和点一一对应,然后再普通地更新就可以了…」

瑾茕一边敲击着键盘,一边回答着天语。

…做法是没错的,但是也不可以和她「嗯,就是这样了」之类的话。

「你猜猜看?」天语笑了笑后作出了这个回答。

「应该是吧…?」

瑾茕歪了歪头想了一会儿后,有些不安地望着天语。

「写了不就知道了」

「也是…」

望着瑾茕虽然有些泄气,但仍然专心致志写着程式的样子,天语稍微松了一口气。

如果直接就和瑾茕说她的想法正确与否的话,可能会让她形成一些不好的习惯。

能够判断自己的做法是不是正确的,在赛场上是一件很重要的事情。

现在的题目不太难倒是没有什么关系,因为反正一眼就可以看出来只是套模板而己,也不太可能有什么做错的可能性。

但是以后遇到比较复杂的题目的话,就可能会出事了。

因为要用到的性质变复杂了,也可能需要几种不同的想法结合在一起,错误的机会也会变高。所以如果在开始写代码前没有好好地考虑好自己做法的正确性,就可能花费了许多时间实现一个错误的做法。

而且又会因为自己不知道自己的做法是错误的,会苦恼着到底是哪里实现错误了,然后一改再改。但是在错误的做法上不断打补丁,也很难把它改做一个正确的做法。

如果在比赛中出现这种情况的话,之后绝对会后悔得不断地质问自己。

「到底在干些什么」

然后比赛结束后的那一段时间里,都会不断想着如果当初没有死磕那道题目的话,结局会否有所不同。

而之所以会如此清楚嘛…因为自己就经历过。

而且是两次。

也挺难受的,不过也没什么辨法。

唔,但是现在和瑾茕说这一些东西也没什么用。她现在做的题目大多数都只是套模板就可以做到了,大概也很难理解到。

反正待会就要教她新的东西了,就等以后再说吧。

大概过了四十多分钟后。

「唔~做完了」

瑾茕整个人躺在了椅背上,然后伸了一个舒服的懒腰。

「要休息一下吗?」天语看了看瑾茕略带疲态的神情,便有些担心地问着她。

「不用,直接开始就可以了」

「那好吧」

因为接下来要说的东西也没有什么思考的难度,所以如果瑾茕觉得还可以的话,就继续下去吧。

「让我先想想该从哪里开始说起吧…你还记得我一开始教你的时侯,说过OI就像是写小说一样吗?」

「我还记得你说的是要起码要先把基础的算法和数据结构先学好,然后就要提升自己的思考能力。就好像写小说当中,要先把故事写得流畅,然后才能够自己想要表达自己的想法。」

「嗯,你还记得的话就好。当时我没有和你说得太清楚下一阶段你要学些什么,因为当我也不太会解释。」天语苦笑了一下。

「唔,没关系的」瑾茕看到天语苦恼的样子,不禁想安慰一下他。

「没事,之后我稍微想了想后,大概也想到了要怎么和你说了。」

天语从旁边拿了一张纸和笔过来,放在了他和瑾茕的中间。

「一道题目主要的构成,大概会就有两部份,一是性质和观察,二就是算法以及数据结构。」

「算法和数据结构你应该就很熟悉了,我给你的题单就是了,同是这也就是我所说的『基础』。至于性质和观察可能你就可能不太熟悉了,但是我会认为这是IOI当中最为重要的东西。」

「…不太懂。」

在听到天语的说明后,瑾茕思考了一下,然后露出了疑惑的表情。

「不懂是正常的。唔…我举一个例子给你吧,你应该就可以搞清楚性质和观察的含意了。

如果假设我要你给出一个长度为n的排列p,每个元素的编号为1-n。该排列p的价值,就等于当中每一个元素数值和编号的lcm的和,形式化来写就是lcm(p[i],i),然后要求价值最大的排列p。 」

天语在纸下写下了题目,然把手上的笔交给了瑾茕。

「唔…n的范围是多少?」

「你可以先尽量做,先暂时不需要理会范围。或者你直接说你第一个想到的做法就可以了」

「应该可以直接用dp来做,只要记住用过哪些数字,还有枚举到哪一个位置就可以了,这样做的话n的范围就只能在20左右」

「那么要怎样输出答案数组出来」

「可以记住该状态的最大值是由哪一个前置状态更新过来,再逆向输出」

「嗯,没错。看起来那一堆题单没有白做」

瑾茕想到答案的速度比天语想像中要快上许多。尽管这不是这道题的正解,但是这正是他所想要的。

「但是我感觉,你想要的做法并不是这一个」

瑾茕歪了歪头,然后将视线从纸上转移向天语上。

「直觉真准」

「多谢称赞了…不过其实我也觉得你的目的并不是用这种经典的做法去做这条题目。」

「没错,所以接下来就是重点了。

你现在的做法就是有关于『算法和数据结构』这一部份,动态规划就是一种经典的算法。但是事实上根本就不需要用到这么复杂的东西,n的范围也可以去到10^5的级别。 」

「啊?真的吗?」

「嗯,真的。做法简单来说的话,就只要将一个1到n顺序排好的排序当中相邻的两个元素交换,然后再输出就可以了。就要只输出一个1,3,2,5,4….n,n-1或者2,1,4,3,6,5…n,n-1的排序,然后根据n的奇偶性不同就会有一点分别。这样就可以保证该排列」

「咦!为什么啊!」

瑾茕露出了惊讶的表情,低下了头,然后便陷入了沉思当中。

「…是因为n和n+1互质吗?」

思考了一会儿后,她便抬问头来,望向了天语。

「嗯」

「这个就是『性质和观察』吗?」

「没错,而我们平常叫会这种东西叫做tricks。

如果是数据结构或者算法的裸题,你几乎可以一眼就看出来了。但是当题目的做法要利用到各种奇怪的性质和观察的时侯,就可能需要多加思考了。

但当然,大多数题目都是两者结合在一起,如果你连RMQ(区间最大值)之类的东西都不会,那么即使你可以观察到性质也是没有什么用的。 」

「我大概能够理解你想说的东西了」

「说说看」

「数据结构和算法就是让我实现各种做法的工具,所以无论如何都要先学习好基础的东西。

不然就会好像一个虽然有着有趣的故事的小说作家,但是却没有这个笔力去把这个故事描写出来,终究也只是白费力气」

「也可以这么说吧」

或者说,瑾茕其实直接就帮天语总结了他一直以来的想法。

「那么,我接下来应该做些什么练习」

「简单来说,就是随便做CF上的题,一直做下去就可以了」

「嗯?」

瑾茕好奇地轻哼了一声。

「因为性质这种东西基本上千变万化,也不会有一份教材把所有性质都给列出来。所以唯一可以做的就是多做题,累积经验。

在一开始做的时侯可能会遇上许多困难,因为你仍然未熟悉这一种题型。但是不要灰心,多看题解,或者直接来问我就可以了。

而如果等到你练习得足够之后,就开始做竞赛里的题目吧,IOI,APIO,NOI和CEOI之类的。目前那些题目应该对你来说还是太难了,做了也没有什么作用。如果你勉强去做的话就等于浪费了一年试题的练习机会了」

如果瑾茕现在去做的话,应该就只能做到暴力分,如果对照回当时排名来算的话,应该就会落在200名左右。

所以还是等她变厉害一点才开始吧。

「明白了」瑾茕点了点头。

把桌面上的纸和笔收起来后,天语突然想起来有一件事忘记了提醒瑾茕了。

「啊,还有一件事,如果可以的话,多打比赛」

「codeforces上的比赛吗?」

「嗯,如果你不介意太晚的话,就尽量打吧,对你实力提升绝对会有很大的帮助的」

其实打比赛就是做题的其中一种方法。

只不过打比赛的时侯,专注程度绝对会有所不同,而且根据赛后rating的升跌,也可以看得出来自己的进步。

只不过是几乎每一场比赛举辨的时间会有些太晚而己,大概都落在晚上的十点半开始。

自己倒也是没有什么所谓,但是就不知道瑾茕会否愿意破坏自己的作息时间。

「唔…应该没问题的。而且我也想试试看和世界各地的人一起比赛,看起来就挺有趣的」

嗯,瑾茕愿意的话就挺好的,以后就可以多一个人一起熬夜了。

「话说,要和你说一下codeforces比赛的规则吗?」

「哦,好啊」

-----------------------------------

后记:

这一章里面有些内容是参考了这篇文章的https://hackmd.io/@E3-nUNPsRmy1gPXmWIt8jQ/r1yMcVOhu

其实我从前就开始意识到IOI里的题目其实更多需要的是要靠类似「巧妙观察」之类的东西,反而极其复杂的数据结构(例如主席树或者link-cut tree之类的)是不太重要。

甚至我一个澳门队的队友说,相信出一题树链剖分的话,其实大多数IOI选手不一定能做到全解…

但是其实我一直以来也只是有一个这样的想法而己,但却无法直接无法写出来(文笔太烂了)。而直到我看到那一篇文章后,才勉强地表达出我的想法。

而其实我还有许多对于OI的想法想写出来的,希望以后我能够在小说当中继续表达出来吧。