熟背以下板子,并在考试开始时用 \(5min\) 写出来
一定不要忘记写文操!
加入编译选项:-std=c++14 -DDADALZY
#include <bits/stdc++.h>
using namespace std;
template<typename T>
inline void read(T &x)
{
char ch,sym=1;x=0;
while((ch=getchar())<33);if(ch=='-')sym=-1,ch=getchar();
for(;ch>='0' && ch<='9';x*=10,x+=ch-'0',ch=getchar());
x*=sym;
}
template<typename T>
inline void write(T x)
{
if(x<0) putchar('-'),write(-x);
else { if(x>9)write(x/10);putchar(x%10+'0'); }
}
template<typename T>
inline void writesp(T x){ write(x),putchar(' '); }
template<typename T>
inline void writeln(T x){ write(x),putchar('\n'); }
void fileIO()
{
#ifndef DADALZY
freopen("*.in","r",stdin);
freopen("*.out","w",stdout);
#else
#endif
}
int main()
{
fileIO();
return 0;
}
做题策略
-
一定先看完所有的题,挑最简单的开始;
-
一定不要在一道题上连续肝两小时以上;
-
一定要思考两次之后才写代码,正确性第一;
-
一定要把暴力分打满,能拿的分不能丢;
-
因此在毙掉某些做法前一定要先看看可以拿多少分;
-
如果一直想不出解法,需要及时转化生产动力,优化经济结构;
-
错误的解法有可能加了特判之类的可以水过随机数据;
-
一定要在 \(\text{NOI Linux}\) 上自测自己的代码。
一些套路
-
树套树空间爆了考虑把内层换成平衡树;
-
\(DP\) 如果状态范围爆炸了可以考虑其反函数;
-
树上数路径 \(\to\) 点分治;
-
序列问题且数据范围 \(100\) 左右 \(\to\) 区间 \(DP\);
-
有些操作在原序列比较难处理,可以考虑前缀和以及差分数组;
-
数数题如果正着比较难 \(\to\) 反着来;
-
数学题 \(\to\) 打表找规律;
-
DP 如果转移比较复杂 \(\to\) 考虑优化状态设计;
一些优化
-
非递归函数随手加
inline
; -
set
\(\to\)unordered_set
; -
set
/map
用count()
方法判断键值存在会更好; -
清零不要什么时候都用
memset
;
易错细节
-
分清 \(n\) 和 \(m\),也不要搞混 \(i\),\(j\);
-
不要什么都开
long long
,但是要开的一定要开; -
当然有时候需要
__int128
; -
当然在某些函数传参的时候别忘了也需要
long long
; -
数组一定要开够;
-
点分治的时候不要找完重心 \(rt\) 之后还是
dfs(v)
。这虽然答案不会错,但是会全部 \(TLE\) 且难以察觉; -
\(\text{Splay}\) 一定记得什么操作完都要把找到的最后一个节点
splay
到根。