目录
一、万能头文件
一般算法需要用到各种头文件,但是万能头文件包括了绝大多数的头文件,能缩减一些代码量。
但是也有一点副作用,由于头文件一下包含太多,每次在编译的时候都会卡顿一秒左右。对程序本身的运行时间是不影响的。
#include<bits/stdc++.h>
如果确实嫌弃会卡顿一下,这里给出一些常用的头文件:
#include <iostream>
#include <cstring>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <array>
#include <fstream>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <cstdlib>
二、一些宏定义操作
例如 vector的插入操作需要用到 push_back( )很长,所以可以用pb来代替。
#define LL long long
#define PII pair<int,int>
#define fr first
#define sd second
#define pb push_back
#define endl '\n'
- LL 代替 long long
- PII 代替 pair<int,int>
- fr,sd 代替 如map pair的两个关键字
- endl 代替 '\n'
三、提前定义好一些常用的值
const int N=2e5+10;
const int INF=0x3f3f3f3f;
const int MOD = 998244353;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
- N 一般是开辟题目要求的数组空间,大多数题都在2e5的范围内,如果更大则要修改
- INF表示一个1e9的数,一般需要用到一个很大的数的时候就可以用它,但是它不会像INT_MAX那样不能再加任何数(会爆int),LL 级别的可以用 0x3f3f3f3f3f3f3f3f表示
- MOD在题目答案过大时会给出模的数,998244353或者1e9+7
- dx[4]和dy[4]在格点图上表示上下左右四个方向,更方便如bfs遍历,也可以增加到8个方向
四、快读
为了追求算法题的速度,关闭C++ 的同步流,以达到加快读入输出的目的,虽然不会在本质上影响最终时间,但是可以快一些。
注意:使用这个之后就不能用 scanf printf 输入输出了,会造成混乱
这三句话放在main()函数里就可以
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
五、一键获取题目的案例数据
这里推荐一个网页小插件(拓展),这样在每次在读题目前就点一下网友右上角的加号,就可以拿到案例的数据了。
当然还需要配合编译器的插件, 这里我用的是Vs Code
步骤:
1、开始做题的时候点击网页的绿色加号,等待大概2秒(需要提前打开vs code)
2、vs code 这里就自动弹出需要的语言文件,这里我一直都是手动点,不太懂怎么设置成默认的
3、开始写代码,左侧就是题目的数据,点击绿色箭头运行,如果通过就是pass 没通过就是 fail
六、一键生成代码模板
在平时的网络赛,可以将一些解决一类问题的代码整理好,在后续可以一键呼叫(在正式比赛中千万不要用这个!会违规)
这里依然是以Vs Code来说明,sublime或者其他的可以具体百度
1、点击vscode 左下角的齿轮 —>用户代码片段
2、点击新建代码片段
3、 生成这样的一个文件,红色框框内的是没用的,可以直接删掉。剩下的部分把注释取消了。
4、这里详细说明一下
- scope: 后面的两个地方需要修改成你需要的语言
- prefix: 这里是需要的唤醒词,比如这个快速幂 只需要输入qmi 就可以一键搬出来
- body: 这里是你需要保存的代码,注意需要以下面这种格式封装起来
- description: 只是对代码的描述,不重要,可以不改
- !!!都弄好后一定要 ctrl + s 保存,不然就叫不出来
总结:个人心得
这些是我认为使用频率最高的几个技巧,除此之外还有很多,但是这些都只是服务做题的,对解题本身没有任何帮助,重点学习算法本身以及提升思维能力才是硬道理,不能一直追求一些捷径。
gg,推荐课程:https://xxetb.xetslk.com/s/kNPSd