蓝桥杯参赛笔记

一. 关于时间安排
比赛时间4个小时,注意以提交题目的系统时间为准,做完一题交一题,避免最后因为时间不够没交完题。在4个小时中同一道题可以提交多次,每次提交都会覆盖上一次的代码。

二. 关于填空题

    今年蓝桥杯是5道填空,5道大题。一般第一道填空是签到题,也就是我们所说的送分题,可以通过一系列手段(比如Excel、word、电脑自带计算器、手算等)来得分。
    解决填空题一定要用最快的方法,能用工具解决的题绝不写代码!
    每一道填空题看一遍如果有思路就写,没思路直接跳过。
    以今年的填空题为例:第一道和第二道都能通过手算得出答案;第三道和第四道是常考点,有机会得分;第五道模板题也有机会得分,但很难可以直接跳过。
    填空题尽量控制在1个小时左右,把自己该拿的分拿到。

三. 关于编程大题

    每一道编程大题程序结束,一定要写return 0; 不写整道题都没分!推荐一个好的编程习惯:先写出主程序的框架,再去补中间的代码:

#include <iostream>  
using namespace std;
int main()
{
        
        return 0;
}
三.编程大题中的头文件  

typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll  INF = 0x3f3f3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double E = exp(1.0);
const int MOD = 1e9+7;
const int MAX = 1e5+5;

main函数中加入以下代码,降低时长
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0)

    今年的蓝桥杯可以使用万能头文件,不知道明年能不能
    万能头文件写法:#include <bits/stdc++.h>
    建议大家在平时刷题和比赛过程中还是把所有头文件都写出来,如果实在记不住头文件,再使用万能头文件。因为使用万能头文件编译时间可能略长,造成程序超时。
四.编程大题中的输入输出
    ① 由于是C和C++混合编程,所以可以使用C语言中的scanf和printf来进行输入输出,也可以使用C++中的cin和cout进行输入输出。但是强烈推荐使用scanf和printf来输入输出。因为使用cin和cout存在一个缓冲区的刷新,时间较慢,可能会造成程序超时。
    ② 蓝桥杯比赛中多数是单输入和单输出,也就是只要求输入一个数并输出一个结果,而平时做题一般是多输入和多输出,也就是多组数据对应多个输出结果。注意:在多输入和多输出的题目中,在每一次循环后数组是否需要清零,是否需要清空标记等一系列问题。
    ③ 关于数据范围:大题的题目中会给出相应的数据范围,根据题目的数据范围来选择数据型是int 还是long long 还是其他类型,注意如果是使用long long的话,要用%i64d(i大写)进行输入输出,如果是平常做题过程中使用%lld进行输入输出。(用%i64d(i大写)还是%lld根据情况而定,如果Windows评测机采用%i64d(i大写);如果Linux评测机采用%lld)
    ④ 注意输入输出的格式,看清输出是否有空格或者是行末空格,如果有的话对于行末要进行特殊处理(加个if语句就行)。
    ⑤ 建议一些变量、数组、标记等定义在全局,这样就避免了初始化,因为放在全局的变量,系统自动初始化成0。
五.关于模板题
    蓝桥杯常考模板题,对于一些常见模板,我们要做到烂熟于心。比如DFS和BFS的模板、二分模板、背包问题模板等等,这些模板在学习时要理解算法思想,然后通过不断练习来背过模板,在比赛中看到类似的题能加快速度。(一些常用模板我也会分享出来)
六.关于样例
    样例是一个比较坑的东西,有的题样例过了,但照样是零分。比赛时如果时间充裕注意多测几组特殊的样例,比如0这样的一些特殊数据或者是一些小数据。

七.关于骗分
    蓝桥杯比赛中的大题并不是一个样例不通过就没有分,对于一些实在做不出来的大题可以通过暴力枚举等方式来获得部分分数。

1.strncpy(),出现在代码填空题中,要知道它使用什么头文件#include<string.h>

格式:strncpy(char *dest,char *scr,int n):将scr中的字符复制到dest中,长度为n

2.strcmp(),出现在代码填空题中,要知道它使用什么头文件#include<string.h>

作用:

比较两个字符串str1,str2

若str1==str2,返回0

若str1<str2,返回负数

若str1>str2,返回正数


2每一道编程大题程序结束,一定要写return 0; 不写整道题都没分!!!!

(1)并查集一定要记得对f[i]=i进行初始化
for(int i=0;i<n;i++)  f[i]=i;
(2)使用vector一定要加头文件:#include<vector> 否则会编译出错
(3)记得写return 0;
(4)输入换行,则输入结束
(5)输入一组数字,输出以换行结束
//第一种:
while(cin>>n){
    char ch = getchar();
    if(ch==' '){//该循环结束
        break;
    }
}
//第二种:
while(cin>>n){
    if(cin.get()==' '){ //该循环结束
        break;
    }
}
(6)输入一行字符串(含空格)
方法一:gets()读入char[]
char s[100];  gets(s);
方法二:getline()读入string或char[]
string str;
getline(cin,str);//读入string

char str2[1024];
cin.getline(str2,1024);//读入char数组
说明:这是比较常用的方法,cin.getline第三个参数表示间隔符,默认为换行符' '。读入不需要考虑最后的换行符。

(7)注意输出格式问题,有一道题中间的逗号要输出一个空格没注意,导致错了两次都是0分。
错误:cout<<a<<","<<s<<endl;
正确:cout<<a<<", "<<s<<endl;