前言
蓝桥大赛在即,昨天又翻出了2年前写的博客新版骗分导论(最少骗到省级三等奖)——noip想着在修改一下,组成蓝桥的骗分导论,由于蓝桥和noip的比赛相似,是按测试点给分,所以有需要的也可以参考新版骗分导论,当然以前没有想到的,也会在新文中补充,话不多说,我们开始吧,为了300块,为了取得更高的名次!!!
骗分导论,更新后给你了,拿不上奖,可别赖我!
合理使用考试外的电脑工具——简称外挂
别想多了,我可不敢给你作弊,这是合理使用外挂,由于蓝桥中有几个填空题,所谓填空题就是你只需要写出答案即可,我们可以使用类似于:
计算器,word,excel等其他工具
计算器
例如:
某星系深处发现了文明遗迹。
他们的计数也是用十进制。
他们的文明也有日历。日历只有天数,没有年、月的概念。
有趣的是,他们也使用了类似“星期”的概念,
只不过他们的一个星期包含了9天,
为了方便,这里分别记为: A,B,C…H,I
从一些资料上看到,
他们的23日是星期E
他们的190日是星期A
他们的343251日是星期I
令人兴奋的是,他们居然也预见了“世界末日”的那天,
当然是一个很大很大的数字
651764141421415346185
请你计算一下,这遥远的一天是该文明的星期几?
你需要提交的是一个大写字母,表示该文明的星期几,
不要填写任何多余的内容。
怎么写?聪明的我会用计算器,那么,彦祖应该比我聪明吧
7正好对应外形日历的G,答案就是G。
excel
又例如:
如果标题出现:第几天
2000年的1月1日,是那一年的第1天。
那么,2000年的5月4日,是那一年的第几天?
注意:需要提交的是一个整数,不要填写任何多余内容。
这怎么办,考过的计算机基础知识——excel不就排上用处了吗?
常用的代码模板
不得不说,这个我在noip中没有提到过,但是在最近的刷题中,发现有很多题的简单小模板是一样的,记住几个模板会使考试中的效率大幅提升!!!
辗转相除法求最大公约数
闰年
bool rn(int year){
if((year%400==0)||(year%4==0)&&(year%100!=0))
return true;
return false;
}
素数
#include <stdio.h>
int main() {
int n;
printf("请输入一个1-100之间的整数:\n");
scanf("%d", &n);
int m = 0;
for (int i = 2; i < n; i++ ) {
if(n % i == 0) {
m++;
}
}
if (m == 0) {
printf("%d是素数\n", n);
} else {
printf("%d不是素数\n", n);
}
return 0;
}
对于文中出现的第一个for循环,我们可以这样优化——
for(int i = 2; i < n / i ; i++)
我讲文章,必定是要知其所以然的,理由如下:
质数分解,试除法
for(int i=2;i<=sqrt(n);i++)
不推荐这样写,因为sqrt函数本身是十分慢的
for(int i=2;i<=n/i;i++)这样写,
那么为啥不能for(int i=2;i×i<=n;i++)
有可能i×i大于int的取值范围
排序——sort
一般情况下,在考试中我们尽量使用algorithm中的——sort
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int a[10] = { 1,3,4,2,5,6,7,9,8,0 };
sort(a, a + 10);
for (int i = 0; i < 10; i++) {
cout << a[i] << " ";
}
return 0;
}
关于sort的更深层次的解释,包括从大到小的排序,还请彦祖们,参考我的这篇博客——algorithm中的排序算法详解
函数库
这个看需求使用吧,常用的也就那么几个,详细还请参考我去年写过的——OI最全函数总结,对于蓝桥来说也是足够用了。
暴力
蓝桥杯在以前我听学长们说也被称之为暴力杯,为啥?和noip的得分类似啊,像这样
每个对应的节点有对应的分数,超时也有分!!!
万能钥匙——DFS
DFS是图论中的重要算法,但我们看来,图论神马的都是浮云,关键就是如何骗分。
≻DFS是万能的≺
这对于你的骗分是至关重要的。比如说,一些动态规划题,可以DFS;数学题,可以DFS;剪枝的题,更能DFS。下面以一道省选题为例,解释一下DFS骗分。
例题:NOIP2003,采药
题目描述 Description
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”
如果你是辰辰,你能完成这个任务吗?
输入描述 Input Description
输入第一行有两个整数T(1<=T<=1000)和M(1<=M<=100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
输出描述 Output Description
输出包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
样例输入 Sample Input
70 3
71 100
69 1
1 2
样例输出 Sample Output
3
数据范围及提示 Data Size & Hint
对于30%的数据,M<=10;
对于全部的数据,M<=100。
void DFS(int d,int c)
{
if(d==n)
{if(c>ans)ans=c; return;}
DFS(d+1,c+w[i]);
DFS(d+1,c);
}
打表
何为打表?对于有的题输入的数据小,对应的输出数据也就固定了,我们不会怎么办???我是来得分的,拿分才是目的,直接打印出输出数据就好了啊,记得当年奥赛队中有个同学,老师一出题,他就说,能不能打表!!!
例如:火柴棒等式
给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是00)。用火柴棍拼数字0-9的对应如下所示:
0->6根1->2根2->5根3->5根
4->4根5->5根6->6根7->3根
8->7根9->6根
歪解:纯打表
我们只需定义一个答案数组
int ans[25]={0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,8,9,6,9,29,39,38,65,88,128};
scanf("%d",&a);
printf("%d",ans[a]);
完成了???请评论一下666
最后
博主,还是要告诉大家,骗分不是万能的,平时好好学,可以不用骗分拿到好成绩的,我们应该抵制这种行为(手动狗头保命)
请大家给一个三连,作为回报,博主也给大家准备了一份蓝桥礼包——历年真题,感谢大家,每个三连就能拯救一个小博主!!!
链接: https://pan.baidu.com/s/1yg1gFL0TE_PEgHLIqlWwog?pwd=ymm1
提取码:ymm1