如何在比赛中进行暴力和骗分?
听取MLE声一片
·
·
个人记录
声明
本文主观性较强,可能含有口嗨,请谨慎对待其正确性。
本文针对于联赛,因为省选并不在我经验范围内。
这是之前的版本,如果想看就去那看看。
前半部分(直到 NOIP2020)是在 21-22 赛季正式开始前写的,后半部分是在 22 年末以及 23 年初写的。这也算是把之前挖的坑给填好吧。全文写的比较小丑,请见谅。
为什么没有 2021 年?因为我 2021 年整一年都在自闭。
如果这对你来说有帮助,就点个赞吧。
一定要看后记。
如何在比赛中进行暴力和骗分?
\text{Part -1} 目录
-
-
-
- $\text{Part 2.1}$ 前置知识
- $\text{Part 2.2}$ 比赛分析
- $\text{Part 2.3}$ 实战演练
-
- $\text{Part 3.1}$ 前置知识
- $\text{Part 3.2}$ 比赛分析
- $\text{Part 3.3}$ 实战演练
-
- $\text{Part 4.1}$ 前置知识
- $\text{Part 4.2}$ 比赛分析
- $\text{Part 4.3}$ 实战演练
-
- $\text{Part 5.1}$ 前置知识
- $\text{Part 5.2}$ 比赛分析
- $\text{Part 5.3}$ 实战演练
-
-
\text{Part 0} 前言
CSP 即将来临,肯定有很多同学肯定在为绿勾蓝勾而奋斗,希望能在二轮比赛中获得好成绩。
然而,神仙都是经过千锤百炼而诞生的,蒟蒻是不能在短时间内弥补与神仙巨大的实力差距,而又需要与神仙来竞争。这应该怎么办呢?这就需要暴力与骗分。
骗分导论
这里说一下我对暴力和骗分的理解:
暴力:用自己已经熟练掌握的方法或者非正解对一道题拿到部分分甚至AC。
骗分:在一道题不择手段地(SSH等除外)拿到尽量多的部分分。
从这里可以看到,我所定义的暴力与骗分不仅仅包括爆搜、循环、输出无解等,更多的包括依靠自己实力来获得比最朴素的暴力多得多的分数。
暴力和骗分是一个很有用的技巧,但它也依靠这自己的能力。下面我来举一下 2020\sim2021 和 2022\sim2023 比赛季的四场比赛,普及组的比赛就不再讲解,原因是普及组的东西是最基础的,普及组不建议在一二题骗分。
也可以说,本篇文章是为想要一等的同学准备的。
\text{Part 1} 心态
首先,心态是最重要的。
同一个你,同一份考题,有没有一个好的心态,能差好几十分,甚至是数百分。
在比赛开始之前不要把结果看得太重,平常心去比赛即可。不管成功或者失利,出成绩都不要过于高兴或悲伤,这绝不是终点(除非您高二)。
\text{Part 2} CSP-S 2020
\text{Part 2.1} 前置知识
极其熟练的搜索,一定的 ds 基础(ST表,树状数组,线段树,LCA),一定的dp基础(会绿题及一下经典题目的方程推导),组合数学入门,能做一些中型模拟甚至大模拟(不限时间),基础STL,一定的图基础,一定的字符串基础(哈希),图上的 tarjan 之类。
练习可以去洛谷题单搜索,十分方便。
\text{Part 2.2} 比赛分析
提高组的比赛,难度不算太高,能拿到很多部分分的。
有一说一,2020 年的提高组比赛题目不算太难,但是第一题搞人心态。做题顺序能很大程度上决定分数。
\text{Part 2.3} 实战演练
题库中前四道
拿到试卷,我们看到了第一题:
儒略日
数据范围:
| 测试点编号 |
Q = |
r_i \le |
| 1 |
1000 |
365 |
| 2 |
1000 |
10^4 |
| 3 |
1000 |
10^5 |
| 4 |
10000 |
3\times 10^5 |
| 5 |
10000 |
2.5\times 10^6 |
| 6 |
10^5 |
2.5\times 10^6 |
| 7 |
10^5 |
5\times 10^6 |
| 8 |
10^5 |
10^7 |
| 9 |
10^5 |
10^9 |
| 10 |
10^5 |
年份答案不超过 10^9 |
显然这是道大分类讨论题,这就引出了我们第一个原则:
大分类讨论和大模拟尽量往后放
很多人折在第一题上,导致分数线很低。
先看一下数据范围,发现前四个点都是公元前的,非常好写,橙题难度,直接写个暴力枚举月份即可,大约 20 分钟即可完成。
期望得分: \mathbf{40+0+0+0=40}
然后我们来看第二题:
动物园
这题就很水了,只需要仔细找一下性质即可
有一个条件是“所有的 q_i 互不相同”,这意味着饲料是啥都不重要了,c 和 q_i 甚至不用读进来,这就避免了 MLE。
最多需要 25 分钟就可以把这道题的AC代码写完,特判 k=64,n=0 的情况即可。
此时仅仅过去了一节课的时间,我们就期望得到了:\mathbf{40+100+0+0=140}。
之后我们开第三题:
函数调用
显然,我们可以很容易的写出不包含三号函数,裸的线段树2,写完大概需要 25min(不熟练线段树的话)。
接着来看特殊限制:
不含第 2 类函数或不含第 1 类函数
不含第1类函数极其简单,因为是全部的操作。
然后显然纯暴力是可以把 1\sim 4 数据点跑过去的
这样我们又期望得到了 \mathbf{40} 分,目前期望 \mathbf{40+100+40+0=180} 分。
T3的正解其实也不算太难,现在可以先写一下T4的暴力,回头再写T3。
第四题:
贪吃蛇
从题面很容易就可以得知这一个性质(每条蛇的策略),设还剩下 m 条蛇,长度递减。
下面比较默认加上编号比较。
如果 a_0 吃了 a_m ,而且吃完之后还不是最小的,即 a_0-a_m>a_{m-1} ,a_0 肯定会吃。
如果 a_0-a_m<a_{m-1},如果 a_1 按照同样的策略不吃 a_0 的话, a_0 就吃。
根据第一条性质就可以很容易得想出基本代码,但是会栽在大样例上,而且每个都会多 1。
从这里就可以帮助我们想第二条性质,就是性质二可以再帮助我们吃掉一条蛇!
如果说想到这第一条性质,可以获得 \mathbf{20} 分。
如果想到第二条性质,我们最少可以获得 \mathbf{40} 分。
第二条性质该怎么办呢?用奇偶性搞。
我们把 a_2 定为第一条蛇,以此类推。
显然,如果第奇数条蛇的决定是吃,a_0 选择不吃。
如果第偶数条蛇的决定是吃,a_0 选择吃。
这个东西就可以用一个 set 来维护,分成两个阶段。
第一阶段:最长的疯狂吃,直到最长的吃掉之后比最短的短。
第二阶段:判断奇偶性看看能不能再吃一条。
然后就可以用 set 来维护,时间复杂度为 Tn\log(n) ,可以拿到 \mathbf{70} 分!
(满分算法其实优化起来不算太难,不过这好像已经是正解了就不放了,感兴趣的可以看题解)
期望得分:\mathbf{40+100+40+[20,70]=[200,250]} 分
然后就可以去看前面的T3和T1了,您可以尝试去写T3的正解(拓扑一下即可)以及干T1的分类讨论。
T1的分类讨论发现非常复杂,我们发现可以用二分方法去做,比直接弄要简单不少。
如果时间足够是可以写出正解的。
期望得分:\mathbf{[40,100]+100+40+[20,70]=[200,310]} 分
可以看到,最低档的暴力分是在 \mathbf{200} 分,而最高档的已经达到了 \mathbf{310} 分。
而蓝勾分数线仅仅为 \mathbf{140} 分,有很多的挂分空间。
小总结
大胆猜想,小心求证。其实前面那一句话是很重要的,比如贪吃蛇的第二条性质,只要总结出来分数就可以至少提高 \mathbf{50} 分。
\text{Part 3} NOIP 2020
\text{Part 3.1} 前置知识
基本和前面的一样,而又往后了一个月,可以往前学习一点。
大概可以向前学树剖网络流之类的。
关于字符串:MLE太菜了不会字符串,只会哈希和暴力,就不写了。
\text{Part 3.2} 比赛分析
这场比赛总体来说难度也不算太高,就是T1卡了先乘后除。
\text{Part 3.3} 实战演练
题库中后四道
我们拿到了第一题排水系统。
显然这是一道拓扑排序的裸题,直接扔一个板子。我假设您看到了数据范围,并且有非常好的习惯这道题用了先除后乘,时间大概过去半个小时。
因为数据范围算出来一个点很有可能爆ll。
期望得分 \mathbf{90+0+0+0=90} 分。
我们来看第二道题字符串匹配。
这道题显然有个极其暴力的做法,直接照着题面,从头开始找循环长度,直接模拟即可,但是一定要注意细节。
参考代码,考场写的,很臭,请见谅。
对于特殊性质一和二,因为只含有一到两种字符,就可以用字符串哈希来搞一下,这样就得到了不少的分数。
期望得分 \mathbf{90+[48,84]+0+0=[138,174]} 分。
第三题是一道构造题,先放一放。
第四题微信步数。
显然 -1 的情况很容易判断出来,就是一轮循环仍然在原地。
然后前三十分的暴力非常好拿,写一个dfs就行。
暴力代码
因为后面估计还有一个点是 -1,所以我们期望得分是:
检查其他题没有问题,我们就来看第三题[移球游戏](https://www.luogu.com.cn/problem/P7115)。
这是NOIP第一次出SPJ题,非常考验思维。
先来看 `n=2` 的情况,可以用暴力解决,具体可以看题解(因为MLE太菜了真不好描述)。
这道题就看您思维水平了,但是10分应该是能拿到的。
期望得分 $\mathbf{90+[48,84]+10+35=[183,219]}$ 分。
### 小总结
NOIP2020确实比CSP-S2020要难一些,但还是可以通过自身强大的功底来获得比上述期望高的多的分数。
参考:山东高中生NOIP2020一等分数线大概是140分,不算高。
## $\text{Part 4}$ CSP-S 2022
### $\text{Part 4.1}$ 前置知识
基本同上。
### $\text{Part 4.2}$ 比赛分析
算是近几年最简单的提高比赛了,非常容易得很高的分。
骗分也是没有啥表现,直接写正解就差不多了。
### $\text{Part 4.3}$ 实战演练
[题目链接](https://www.luogu.com.cn/problem/list?tag=342%7C59&page=1)
看到第一题,因为中间只有四个点,自然想到枚举中间两个点。
然后就转化成求每个点经过一个点再到达起点的分数。
算上重复也最多取三个,枚举每两个点前三个判断是否合法即可。
期望得分 $\mathbf{100+0+0+0=100}$ 分。
接着看第二题,一眼申必 st 表,直接敲上,注意些细节就差不多过了。
期望得分 $\mathbf{100+100+0+0=200}$ 分。
最多两个小时就能写完前两道题。
第三题题面看起来很麻烦,仔细读完题发现可以反攻当且仅当出度均为 1。
首先把 $n^2$ 的写了,然后考虑用 set 维护把没有操作 4 的做出来,就有 $60$ 分了。
期望得分 $\mathbf{100+100+60+0=260}$ 分。
第四题随便写写暴力,最少把 $16$ 分 $k=1$ 暴力写了。
期望得分 $\mathbf{100+100+60+16=276}$ 分。
因为没打,而且太简单了,描述就很简略。
## $\text{Part 5}$ NOIP 2022
### $\text{Part 5.1}$ 前置知识
基本同上。
### $\text{Part 5.2}$ 比赛分析
分数严格依赖于开题顺序的比赛。
个人认为如果 swap T2T3 队线会提高 30-50。
为了留有一些真实性,我们按照考场上做题进行分析。
### $\text{Part 5.3}$ 实战演练
[题目链接](https://www.luogu.com.cn/problem/list?page=1&tag=83%7C59)
第一题是[种花](https://www.luogu.com.cn/problem/P8865),是一个小清新签到题。随便跑几次前缀和就能过了。
注意多测要清空。
时间大概要二十分钟要一个小时吧。
期望得分 $\mathbf{100+0+0+0=100}$ 分。
然后看到了[喵了个喵](https://www.luogu.com.cn/problem/P8866)。
看到题之后发现 $k=2n-2$ 非常简单。可以一个栈固定塞两种,最后空出来一个栈,然后用这个空出来的栈对每次塞进来的卡牌和前面的卡牌进行消除。策略就是能消就消。注意要输出步数。
期望得分 $\mathbf{100+15+0+0=115}$ 分。
此时时间过了不到一个小时。
因为你的经验告诉你,如果联赛第二题都拿不了高分会很丢人,然后你开始硬冲喵了个喵。
时间又过去了快两个小时,发现 T2 非常神秘,还是没想出 T2,我们假定你把爆搜写了并写对了。
期望得分 $\mathbf{100+35+0+0=135}$ 分。
时间还剩将近两个小时,显然是不能继续冲 T2 了。
开始看 T3 [建造军营](https://www.luogu.com.cn/problem/P8867)。
看了一会题面不难想到,这是一个缩点+树上 dp。
但是不能保证一个多小时内能把这两个写完并写对。
再来看 T4 [比赛](https://www.luogu.com.cn/problem/P8868)。
这题是一道数据结构题,而且看起来比较经典。但是这个时候显然是不能想正解了。
$n^2$ 的前缀和很容易写,这样是有 $20$ 分的。
单调栈是有 $52$ 分的,但是这没时间了。
期望得分 $\mathbf{100+35+0+20=155}$ 分。
最后来看 T3。
看到状压竟然有足足 $35$ 分,所以决定去打这档部分分。
$2^n$ 枚举哪些点选作军营,然后再统计有多少条边是必须要保护的,这个单次可以用 $m^2$ 做到,假定结果是 $x$。所以这个状态对答案的贡献就是 $2^{m-x}$。
期望得分 $\mathbf{100+35+35+20=190}$ 分。
大概可以在结束前十多分钟前完成吧。
看到后面还有 $10$ 分链的部分分。假设军营最左端是 $l$,最右端是 $r$,显然 $l$ 和 $r$ 内部可以随便插入军营,而且 $l$ 到 $r$ 之间的道路必须要守。可以通过枚举区间长度进行统计。
期望得分 $\mathbf{100+35+45+20=200}$ 分。
### 小总结
如果开题顺序改为 $1-3-4-2$,分数大概可以比刚才的 $200$ 分提高至少 $30$ 分吧,上面是按照真实考场上大多数人的开题顺序写的。
其实 csp-s 已经暗地里挑出第一题比第二题难,但是因为 csp 第一题比较水所以没啥人注意到这一点。
最大的教训是开题顺序不能严格依赖于题目安排顺序,一定要在比赛开始时读完每一道题再做。
## $\text{Part 5}$ 做题策略总结
我写的这四场比赛,大多数的得分都和开题顺序有关。
所以,一定要在开始时,看完全部的四道题,自己心里评判一下难度,再从对于自己来说好做的开始做。
或者说更暴力一点,遇到非传统题默认手动排到第三题。
正解不会就别想正解了,因为会有 $114514$ 分的部分分也可以拿。
## $\text{Part 6}$ 后记
这大概是我前年为了总结一下如何暴力骗分而开始写的东西吧。
文章的前半部分是 21-22 赛季开始前写的,现在看来比较小丑,有时间就改改。虽然说我现在也很小丑就是了。
写写停停那么长时间的东西也改完结了吧。
其实暴力和骗分,最终指的还是部分分。
对于每个人来说,暴力的标准显然是不同的,所以就能拿到不同档的部分分。
这个能打的部分分的高低,归根结底来说还是自己的能力。
这可能也比较小丑,为了突破自己的能力拿到更高分而学习暴力和骗分,然而最后暴力和骗分还是要归于自身能力的。
对于一个人来说,部分分是非常多的,但是这又引出来 OI 正赛的一个关键词——挂分。
有骗分技巧能提高分数上限,而挂分则决定你到底能获得多少分。
最终的得分,大概是归结于自身的能力和考场技巧的。
但是,显然一个人的能力是不能简单量化的,还得看相性。
每个人都有相对突出的点,也有相对差劲的点。如果考到自己擅长的点,分数可能会提高,反之分数可能会降低。
总之,这就是 OI,永远存在不稳定因素,就像一场豪赌的,但是我们仍然坚持的,信息学竞赛。
补:之后可能会改改一下前面的内容,看看有没有时间吧。