新《骗分导论》

· · 个人记录

我又来不务正业了!!

如题,我们就可以看出这其实没什么用,但为了竞赛的得分最高性,这其实也是大多蒟蒻会学且必学的方法。 至于什么是——“骗分导论”,那就是逝世,首先是骗分,我给出了以下定义:

真香定律中说道,做出超范围的事总会遭受他人打脸,所以,骗分也是有坏处的。

骗分,顾名思义,不会写的题骗几分,积小成多,很可能骗分的蒟蒻就比认真做题 的蒟蒻高出几分。

综上,骗分导论就是研究骗分的导论(似乎啥都没说)。

要达到骗分我们要怎么做呢???

1.青铜:打表,最实用的骗分:

打表是性价比比较高的骗分技巧。在赛场上的最后时刻,选择打表准没错。

1)样例——白送分

很多时候,样例是做题时的帮手,他可以帮助判断你的代码是否有明显错误,也同 样可以用来骗分。美国比赛USACO当中,样例必须是第一个测试数据。

2)数学时间

有时候,关于数学的题目,且数据范围小,就直接把所有情况动手算出来,if-else直接输出。让我们来看一道例题

在这,许多的蒟蒻都不会栈,只好骗分,那么这题怎么骗分呢? 我们定睛一看:n≤18n≤18!!!wc,真是的,这也太小了吧! 所以我们直接掐指一算就算出来了。

    int s[18] = {1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700};

    cin>>n;
    cout<<s[a-1];

这样,我们就AC了。

3)打表的结论

打表实际上代码量有时较多,但是思考比较少,属于性价比较高的一种骗分方法。(认真)

3.白银:无解最好玩

接下来的这一章是所有蒟蒻最喜欢的:无解。话不多说,先来上例题:P1078文化之旅这是非常好的一个利用无解骗分的题目,对蒟蒻们来说,这道绿题有点难,但是请看他的最后一句话:

一个整数,表示使者从起点国家到达终点国家最少需要走的距离数(如果无解则输出−1)

看见没有!无解输出-1! 所以只要输出-1就可以得到10分,甚至20,30,45分!!!怎么样,是不是很神奇!!!!!!!!

4.黄金:小学数学找规律

本节讲的规律不是正当的算法规律,而是数据的特点。

先来一道例题如果不看题目,你会发现,这么一个算式,怎么算啊!

没事,你要用到找规律。

我们可以看到给了一组样例,好嘛,找不了规律。

那么这就要考验数学了,只需要用纸和笔算出来一两组小数据的结果,就能很容易发现这是斐波那契数列了。

其实就这么简单。

别看找规律麻烦,真正要用到它的时候就能派上大用场!

当然,找规律是所有的骗分技巧中最不实用的一种方法,他只能在合适的时候用,

例如斐波那契数列这道题就适用,文化之旅就不好用了。所以一定要谨慎地使用找规律。

某些题目会给你很多样例,你就可以观察他们的特点了。有时,数据中的某一个 (或几个)数,能通过简单的关系直接算出答案。

只要你找到了规律,在很多情况下你都能得到可观的分数。

5.铂金:千能的模拟

本章我们要进入算法了。

请蒟蒻中的蒟蒻自行退出。(其实留下来也行)

模拟是一种朴素算法,他在骗分里却很实用。

他主要是骗一些高级数据结构的分,最常见的就是线段树。

那么我们就来看一道不在洛谷上的有技术含量但是能用模拟骗分的USACO线段树题目。

Description

每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. John 准备了Q (1 <= Q <= 180,000) 个可能的牛的选择和所有牛的身高 (1 <= 身高 <= 1,000,000). 他想知道每一组里面最高和最低的牛的身高差别. 注意: 在最大数据上, 输入和输出将占用大部分运行时间.

Input

* 第一行: N 和 Q. * 第2..N+1行: 第i+1行是第i头牛的身高.

* 第N+2..N+Q+1行: 两个整数, A 和 B (1 <= A <= B <= N), 表示从A到B的所有牛.

Output

*第1..Q行: 所有询问的回答 (最高和最低的牛的身高差), 每行一个.

Sample Input

6 3
1
7
3
4
2
5
1 5
4 6
2 2

Sample Output

6
3
0

这道题一瞅就很难,我们蒟蒻不能硬啃。

我们来看看这道题怎么骗分。

找规律找不了,没有无解操作。

难道只能打表吗?

然而我们发现,这题是个线段树题,所以我们可以用模拟来骗分!

所以,我们只需要写一个程序,模拟程序。分也就骗到了:

    for(int i = 1;i <= q;++i){
        scanf("%d%d",&a,&b);
        int nim = a;int max = b
        for(int j = x;j <= y;++j){
            if(h[j]<min)min=h[j];
            if(h[j]>max)max=h[j];
        }
        printf("%d\n",max-min)
    }

搞定了!那么我们这章就到这儿了.

6.钻石:爆搜,最强的骗分技巧

欢迎来到爆搜这章。

爆搜,顾名思义,暴力枚举和搜索。

1)暴力枚举

暴力枚举不用说,三连击是一道很好的练习题。

那我们怎样用暴力枚举骗分呢?这块就不上代码了,累了

首先我们要清楚,暴力枚举只有在有思路的时候用。

暴力枚举一般用来骗什么分呢?有三种。

1.搜索

2.DP

3.但自己不明白这题怎么做,但有思路时

所有的题有思路不会写的时候,不用想那些类似贪心、dp这类高级算法,用暴力直接求得分,有时间再钻研。

2)万能DFS

搜索里有DFS和BFS,但是BFS不适合骗分。

DFS是搜索中的重要算法,包括着回溯,但我们看来,图论神马的都是浮云,关键就是如何骗分。

DFS对于骗分是至关重要的。比如说,一些dp,可以DFS;数论,可以DFS;剪枝的题,更能DFS。下面有一道dp例题看到没!30%是10以内的! 我们的DFS就要瞄准这里。->

void DFS(int a , int b){
    if(a==n){
        if(b>ans){
            return;
        }
    }
    DFS(a+1,b+w[i]);
    DFS(a+1,b);
}

这里,这一章就结束了。

7.王者:我命由天

1)随机数

如果你觉得你的人品很好,可以试试这一招——输出随机数。 先看一下代码:

#include<bits/stdc++.h>
int main(){
  srand(time(NULL));
  printf("%d\n",rand()%X);
}

这种方法适用于输出一个整数(或判断是否)的题目中,答案的范围越小越好。让老天爷决定你的得分吧。 据说,在NOIP2013中,有人最后一题不会,愤然打了个随机数,结果得了70分啊!!

2)蒙的基本对

先看一道例题 发现:只有jolly和notjolly两种,而满足条件的几率很小,那我们就直接输出notjolly就行了啊!

像这样:

#include<bits/stdc++.h>
int main(){
  std::cout<<"Not jolly";
  return 0;
}

那么这一章就到此结束了。

8.天神:贪心的合并

1)贪心算法

dp——动态规划,是一种很难的算法。你做了1000道dp,第1001道还是不会。

考场上遇到dp我们要怎么做呢?

首先需要做的就是:贪心。

在这里声明:不要害怕没过样例,直接去测试就好了。

利用贪心,谁最大就用谁,最多能得到30分。

2)合并

我们已经学了很多骗分方法,但他们中的大多效率并不高,一般能骗10~20分。这不

能满足我们的骗分要求。

然而,我们可以合并骗分的程序。举个最简单的例子,有些含有无解情况的题目,

它们同样有样例。我们可以写这个程序:

if(样例)
    std::cout<<(还是样例);
else
    std::cout<<"-1";
return 0;

这样也许能变10分为20分,甚至更多。

当然,合并骗分方法时要注意,不要重复骗同一种情况,或漏考虑一些情况。

大量能骗分的问题都能用此法,大家可以试试用新方法骗文化之旅

3)*C++党的福利——STL库

快速排序是一个经典算法,也是C++党的经典福利。他们有这样的代码:

#include<bits/stdc++.h>
  sort(s,s+a);

就这么简单,完成了P党一大堆代码干的事情。

C++里还有一种东西,叫vector容器。它可以随着元素的数量而改变大小。它其实就是数组,却比数组强得多。 以下是vector的简介:

(1)可将容器中元素翻转、复制元素、找到元素值对应的位置

(2)迭代器可以按照不同的方式遍历容器

(3)可在容器的末尾增加或删除元素

(4)可在任意位置插入数据 与数组相比,容器在自动处理容量的大小时会消耗更多的内存,但能很好的调整存储空间大小。

9.上帝:报复性心理——死循环

至此,我已介绍完了我所知的骗分方法。如果上面的方法都不奏效,我也无能为

力。但是,我还有最后一招——

有句古话说:“宁为玉碎,不为瓦全”。我们蒟蒻也应有这样的精神。骗不到分,

就报复一下,卡评测以泄愤吧! 卡评测主要有两种方法:一是死循环,故意超

时;二是进入终端,卡住编译器。 先介绍下第一种。代码很简单,请看:

while(1)

&&

for(;;)

就是这短短一句话,就能卡住评测机长达10s,20s,甚至更多!

对于测试点多、时 限长的题目,这是个不错的方法。

10.实战演练

下面我们来做一些习题,练习骗分技巧。

我们来一起分析一下NOIP2013普及组的试题吧

第一道题

第二道题

第1题,太弱了,蒟蒻都能做,不用骗,得100分。

第2题,数据很大,但是可以直接输入一个数,输出它mod 10000的值。得10分。

11.感悟

骗分是蒟蒻的有力武器,可以在比赛中骗得大量分数。

相信大家在这个博客中收获了很多,希望本帖子能帮助你多得一些分。

但是,最后我还是要对所有参加NOIP/NOI的勇士说一句(其实不是我说的):

只有做到不骗分,才是最好的骗分!!!

bye!!!