目录:骗分导论
1 骗分是什么?
总会有一天,蒟蒻与大佬同台竞技。大佬当然可以专心写程序AC,但是蒟蒻却不会那个算法。假如你是李华蒟蒻,请你帮忙想一个办法,让你可以得分。
答案:骗分
骗分是一种竞赛技巧,可以帮你在不会的题上得分。骗分有很多种方法,将在下文详细介绍。
2 基础骗分方法(难度系数1~3颗⭐)
2.1 特判数据⭐
有时,测试点中可能包含数据,特判一下可能可以帮你获得一个测试点的分。
2.2 输出随机数⭐
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
srand((unsigned)time(NULL));
cout<<rand()%N<<endl;//0~N-1
return 0;
}
听说有人用这个方法在某一届NOIp骗来了70+分!如果你觉得你人品够好你可以试试。
2.3 输出特殊答案⭐
如果题目中出现形如这个的话:
如果无解,输出-1
你应该暗自庆幸:输出-1应该可以骗来一些分!不过有些题可能利用这个来坑人,LUOGU P2874:如果没有可行路线的话,输出orz,经过作者实测,会爆0。
2.4 大模拟⭐⭐
如果你有一种模拟策略,可是出于复杂度原因,无法通过所有测试点;并且你不会其他方法,可以试试暴力搜索。
2.5 按测试数据中关系到复杂度的东西分治。⭐⭐⭐
例子:LUOGU P3371:n<=10000,开邻接矩阵会MLE,但是邻接表/链式前向星不是特别熟,可以采取以下策略:
- n<=500,邻接矩阵+Floyd,即空间n2时间n3。
- n<=5000,邻接矩阵+Dijkstra,即空间n2时间n2。
- n<=10000,邻接表+Dijkstra,即空间n+m,时间n2。
3 进阶骗分方法(难度系数4~8颗⭐)
3.1 DFS⭐⭐⭐⭐
搜索。
3.2 BFS⭐⭐⭐⭐⭐
搜索。
3.3 概率论⭐⭐⭐⭐⭐⭐
可以结合一些概率知识判断答案可能的分布情况,然后结合输出随机数或模拟等方法给出答案。
3.4 打表⭐⭐⭐⭐⭐⭐
之所以给这个难度,是因为:
- 模拟程序不保证正确
- 打表数据范围未知
- 造表时浪费很多时间
3.5 对拍⭐⭐⭐⭐⭐⭐⭐⭐
如果你有很多种想法,可以都写出来,然后比较数据,取比较靠谱的。
4 阎王骗分方法(难度系数9颗⭐)
4.1 保证正确的骗分方法⭐⭐⭐⭐⭐⭐⭐⭐⭐
最好的、最高效的骗分方法就是从现在开始认真钻研OI,学习算法,写保证正确的程序,从小牛成为神犇。
5 结语
打竞赛时,不仅要想着骗分,更重要的是想正确的实现方法。如果你想不出来,就证明这是你的薄弱环节,今后要努力钻研这个算法,从此不用骗分!
6 《骗分导论》信息
作者:rui_er(CQY)
日期:2019年6月24日
字数:1326字