万能头文件
#include <bits/stdc++.h>
包含常用函数需要的头文件,省去写头文件花的时间。
部分OJ不支持万能头(比如POJ)
比赛时需要在热身赛进行测试万能头是否可用,防止因CE耽误时间甚至造成罚时
常量声明
#define N 5000
const int N=1e5+5;
把使用频繁的数字声明成常量,如果需要修改只需要修改一处即可。常用const定义常量。
常用常量:
const int N=5e3+5; //数组大小,根据题目确定
const int mod=1e9+7; //模数,一般为1e9+7或998244353,具体根据题目确定
const ll inf=0x3f3f3f3f3f3f3f3f; //无穷大,使用int或者ll根据题目确定
//const int inf=0x3f3f3f3f;
const double eps=1e-10; //无穷小
//const int tmp=31; //字符串哈希时使用
typedef
typedef long long ll;
typedef unsigned long long ull;
主要是为了方便定义long long变量。
freopen
freopen("in", "r", stdin); //读
freopen("out", "w", stdout); //写
其中第一个参数是文件名。
用于从文件中输入/输出到文件内。输入常在Clion中使用,或者用于长样例且无法复制粘贴时,输出常用来进行空格、换行等字符的比对(因为直接输出到屏幕无法轻易判断空格、换行等字符)。
define&undef
#define x y
#undef x
通常用于写了大段代码之后发现变量名字敲错了又懒得一个个删掉重新改的情况。。。(当然如果里面包含正确的x和错误的x那就不能这样修改了)
ifdef&ifndef
#ifdef DEBUG
...
#endif
#ifndef ONLINE_JUDGE
...
#endif
编译器会在编译时判断是否define过查询的标识符。ifdef是如果define过则后面的代码生效,ifndef则是没有define则生效。endif是结束ifdef或者ifndef。
可以配合freopen使用,以达到本地从文本输入,提交后正常输入的效果。
通常OJ会定义一个ONLINE_JUDGE,我们可以判断这个标识符是否被定义,如果没有定义则认为是本地运行。
对于没有定义标识符的OJ,可以自己在本地定义一个标识符,比如在Clion的CMakeLists.txt内加入
set(CMAKE_CXX_FLAGS -DDEBUG)
这样就定义了一个DEBUG,-D后面跟着的就是标识符。这样可以自己定义标识符,不依赖OJ定义的ONLINE_JUDGE
auto
auto可以替代任意的数据类型,但是必须是在编译时已经明确了的数据类型,比如可以采用auto a=1,但是不可以使用auto定义a这个样子。
可以用于替代名字很长的数据类型,比如迭代器等等。
map<int,int>mp;
for(auto it:mp)
{
...
}
不定期更新,想到哪更到哪