永远放在前面:最重要的
- 检查自己的证件等是否准备齐全。
证件等东西一定要带,不然就无法参加考试!
在jz是 核酸检测+身份证+承诺书+准考证 。
- 文件名永远不要写错。
熟记的文件名再记一遍:
freopen("problem.in","r",stdin);
freopen("problem.out","w",stdout);
这个东西不能错,错了今年就白给了。
当你开题时,较长的文件名建议要从题面拷贝。不然会敲错。
一定在提交之前再检查一遍。
程序方面重要性极其高的
- 大数组防爆。
当你在 256 MB 的空间,并且保证安全的情况下, int
能开 ,
bool,char
能开 ,
long long
能开 。
真正考试时,尽量在空间限制的 甚至更少以内。
还有一个出自 这里 的妙招,防爆。把所有的数组空间 sizeof
一下,加起来,除以 ,得出它所占用的
MB
数。
-
return 0;
要写,不然会出错。exit(0)
似乎没问题。 -
函数/变量名 黑名单:
kill
,delete
,y1
,j1
,y0
,j0
,next
,last
,index
等。
尽量少用动词。
特别的可以加上 qwq
之类的,加上 1
之类不推荐。
部分字母(比如中间或者后面)大写应该不会出锅,简写函数名dfs
、lca
、segtree
、bfs
、spfa
、dijkstra
/dijk
没有问题。
insert
没有风险,但是建议只写 3 个字母,和 del
一样。
(惨痛教训)今年CSP-S 2020 T4挂了20就是因为void kill(int x,int y) 。
-
记住编译,在最后(交之前5~10分钟代码不做改动时)编译一下。
-
记得对拍,建议对拍器写成 这样 形式。
-
不要直接判断换行符!NOI Linux和Windows环境不一样!
建议这样输入字符:
void gch(char&x)
{
x=getchar();
while(!isprint(x)&&x!=EOF)x=getchar();
}
这样直接把非法字符判掉了。遇到文件末尾 EOF
字符时会停止读入。
-
不要使用下划线开头的变量/函数名,
__gcd
__builtin_popcount
,NOI Linux 的编译器无法评测。去年NOIP就有人使用 __int128 ,0分。 -
输出
printf
。输出long long
使用%lld
而不是 %I64 。 -
万能头(
bits/stdc++.h
)是开放的,不用担心。不过编译可能会慢一点。 -
程序不要下标越界,小规模的越界在windows下不会出现RE,请小心。
-
如果中间结果较大,建议开
long long
。 -
namespace
很香。
技巧上的:
-
永远记得使用草稿纸。
-
看到一道题,不要死磕2h,除非你在别的题上都打完暴力了。(
-
不要想着一定要A一道题,你很有可能只能拿到
subtask1
的暴力分。(
-
先看题,不要着急写代码,极有可能是错的。
-
对拍一道题至少20分钟,
duipai.bat
形式的可以一边看别的题一边挂着; -
最后 5~10 分钟不要改动代码了。小心越改越错。
-
时间不要白消耗,一遍遍检查总好过打扫雷。
-
心态不要被任何一道题搞崩,你极有可能只能骗到部分分
关于时空限制上的:
为这个算法所相关的复杂度字母。
最大的 | 能承受时间复杂度 | 算法 |
---|---|---|
暴力 | ||
\le 20 | 暴力/状压DP | |
\le 100 | 四维枚举/区间DP | |
\le 400 | O(n^3) | 区间DP/Floyd |
\le 10^3 | O(n^2) | n^2枚举+常数 |
\le 5\times 10^3 | O(n^2) | n^2枚举(冒泡之类的) |
\le 10^5 | O(n\log n ) | 较大常数的 n\log n 算法 |
\le 10^6 | O(n\log n)/O(n) | 较小常数的 n\log n 算法/大常数O(n) |
\le 10^7 | O(n) | 小常数O(n) |
\le 10^9 | O(\sqrt n) | 分解质因数 |
\le 10^{18} | O(1)/O(\log n) | 数学等算法 |
算法上的:
尾声
CSP 2021 rp++!