Codeforces Div4 体验

💡
前排提示,个人感受而已,我尽量调整视角。

久了没刷CF,最近登上去一看,居然都出到Div4了,有水题不刷不是我的风格。于是就刷了体验一番。我这里参考的是#827。


纵观全局

纵观全局,首先感觉Div4的题目质量还不错。一方面有一定的区分度而非纯水,二方面注重基础而非应用,三方面难题似乎偏思维而非知识。


有区分度

首先A、B题没啥说的,就是手速,没有代码量,基本都能做出来,只是快慢之别。
到C题,主要就是数组遍历和逻辑判断,只要想清楚了就能写出来。对老司机来说,基本上还是拼手速。

接着到E题(比D题简单),就是一个纯二分。主要就是看是不是能一次性写对(对于正好等于查询条件的处理、除以2时如何取整等等)。最后还有个64位整型的问题,需要注意。
所以E题我觉得还是很能区分的。会二分的和不会二分的,能一次写对的和挂几次的,被差int64的和查别人int64的。

F题个人认为比较简单。没啥难的,就是分情况讨论,想清楚,写清楚就好了。主要是吃代码能力。不过这个题的排序比较后面,可能很多人都去攻D题了。

回到D题,对比E题,D题的重点是要观察数据规模,然后预处理。能想到预处理基本上还是能做出来,想不到就没办法了。所以我认为这个题目是比E要更难的。(不要给我说预处理是基本操作……)
预处理这个,可以算是知识性的东西,但也可以算是经验吧。

G题的话,我觉得确实有一定的难度(不是指3500的神DP的难度,是指放Div4里有一点意思)。
需要想到两个性质:1. 或操作之后值一定是增的;2. 对于int来说,无论如何取或,都不会超过32位。
没有啥知识性的东西,纯是不是想得到。对比D题,如果刷的多,其实想到预处理比较容易(比如本蒟蒻,想了一下,先想到是不是可以打表,后看一眼数据范围发现就是预处理打表。)。G题是一定需要从头想的。
然后就是这个代码逻辑需要限定前32位,代码逻辑还是有一些了。
所以G题压轴没毛病。


注重基础

可以看到,所有的题目基本都算是中规中矩。所用到的性质、代码强度、知识的应用我觉得都算是比较基础。

举个反例,比如二分的题目,偶尔还是能看到一些2000左右难度的二分题目的。那么,如果更偏向于灵活应用的话,大可以放一道1700的二分到G题。不说玩出花来,多少能搞点隐蔽的单调性。
因此,我认为Div4放一道E题那样的二分是非常合适的。

我们也可以看到,这些题目开始比较多的使用int64。也有根据数据规模来指导做法的题目。属于是从第一天就要开始坑数据范围,养成提交前看一眼会不会爆int的好习惯。

而代码层面,基本上不怎么刁难。不太需要为了题目中的一些特殊数据做太多的特殊处理。也没有什么麻烦的模拟题。理解做法之后,个人感觉距离写出代码之间的距离不大。


思维而非知识

没有DP这个我觉得很好,或者至少没有非裸的DP(别给我说Div3的DP也是裸的)。
可以看到,所有的题目里面。除了E题需要知道什么是二分之外,其他题目基本上啥都不用知道。
也就是说,理论上,只要愿意,几乎每一道题多想想都能做出来。

反过来,起手一个搜索题,跟一个中规中矩的DP,然后再来个神线段树,最后一个图论直接拍死。后面就是各种神DP,神博弈,神数据结构。这是Div1,不是Div4。

做了一场下来。基本题可以不用任何额外的知识,也不怎么吃经验。压轴的D+G虽然经验能给一些加成,但没经验也不是完全就不可能想出来。
能明显感到Div4和Div3的知识需求的差别。
不过,还是需要说的是。Div4更偏向思维一定程度上是因为他知识需求太少。如果直接对比Div3和Div4的思维需求。那Div4的思维需求仍然是低于Div3的。

所以,综上,Div4感觉明显倾向于考察“能不能想到”而非“知不知道”。但对比Div3的话,不论是思维还是知识考察的都要弱化一些。


总结

我觉得Div4挺好的,非常适合新手。结合Div3、2、1的话,基本能涵盖从0到蒟蒻到大神的全流程练习。感觉CF是越做越大了。


题解

Codeforces Round #827 (Div. 4) ABCDEFG 题解 (Java/C++)
A. Sum题解直接排序后看看前两个数之和等不等于第三个数即可。代码Java
蜀ICP备19018968号