最近打比赛总是犯一些没有脑子的错误。
发现不好好总结一下,可能会经常犯。
而且还有些值得注意的地方。
Part 1
- 打完题目一定要打对拍
- Pascal选手千万千万注意——不要和C++选手玩时间,比暴力,不然会被爆艹一顿。
- 在调试过程中,数组开小的一定要在交题时改回来。
- 数组千万别开小。
- 文件输入输出千万不要打错。
- Pascal的setlength要尽量少用,及其的慢。
- Pascal里字符串的比较(如s='abc',t='abd',if s=t then write('YES');)这种尽量少用。
- Pascal一般见到树的大小超过200000即可打人工栈,当然,可以在递归过程中尽量不定义变量。
- Pascal打完一定要保存,按F2
- 用uses math库调试发现RE,要删掉后调试。不然一直会217
- Pascal在215有时会报201
- Pascal的硬核inline优化没有用
- 一定要用极限数据测一测程序
- 一定要开Long Long
- 一定要小心MLE
- 交题目一定要注意不能交错
- 不会做的题目一定要打暴力,不能头铁正解或是放着不管。
- 有些题目可以利用一个思想——正难则反
- 不要理解错题意!不要理解错题意!不要理解错题意!
- hash不一定要用记录数据的hash,有时双hash、三hash可能更优(看人品)
- 看到前缀可以想到后缀,看到子序列(一定要区分连续的和不连续的)可以想到kmp。
- 看到数位DP可以利用记忆化搜索的套路来做。
- 一些毒瘤图论题,看到边数、点数不大可以想想网络流
- 比赛见到计算几何千万别杠,不然会被反杠一顿。
- 数据结构的题目不打对拍必定会挂。
- 数学题——结论靠猜,证明靠拍
- 一定要特判一些特殊情况。
- 一定要将思路理清后才打。
- 要坚信数据水,想到水法就抛硬币吧。
- splay或spaly一定要记得时时刻刻update,不然不管是分数还是调试过程都会让人心态崩掉。
- spfa
它死了尽量不要用,可以用dij(虽然比较难打) - 对拍程序:(超级好用)
@echo off
:loop
rand.exe>data.in
std.exe<data.in>std.out
my.exe<data.in>my.out
fc my.out std.out
if not errorlevel 1 goto loop
pause
goto loop
- 多组数据一定记得清空
- fillchar一定要注意时间,以免跑挂。
- 肉眼查错误有时候会很优秀(可能会占用人脑资源)。
Part 2
转C++时间:
2019.8.1
接下来是C++专场
- 赋值是=,判断是==。
- 注意二进制操作的优先度是比+和-还有后的。
- 注意i++和++i的区别。i++ :先引用后增加 。++i :先增加后引用 。
- 一定一定一定要注意longlong和数组范围(数组范围是0~n-1)
- 输入记得要加上“&”,输出不要加上。
- 开了longlong一定要输入输出时打%lld
- C++字符串最好利用字符数组。输入时这样输入:scanf("%s",ss+1);
- Pascal中exit在C++中是return,halt是exit。break、continue不变。
- 万能头文件(大比赛慎用):#include< bits/stdc++.h>
- Ox(吸氧羊):
__attribute__((optimize("-Ox")))//(把x换成1、2、3)
- 结尾是否要打return 0?详情请见:https://zhidao.baidu.com/question/374166755.html
- C++的EOF?详情请见:https://zhidao.baidu.com/question/393160350.html
- pascal中close(input);close(output);这玩意儿在C++里叫做:fclose(cstdin/cstdout);当然在比赛中直接return 0即可。
(我也不妨碍你return 1) - 快速读入模板
#include<cctype>
inline int read()
{
int X=0,w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
- register可以写在for语句中,一个硬核优化。
- 是该学学C++自带的东西了。
- C++除法慢,和%是一个级别的。
- C++调试很恶心,肉眼查是必备的技巧。
- 记得C++在主程序定义的变量与全局定义的变量不同。
还有一个东西,石家庄O3!!!
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
- C++不要用什么奇怪的变量:int rank, time, tube, y0, y1,next;之类的。
- long double 用%Lf
- unsigned long long输出用%llu 读入的话用读优或cin吧。(cin >> A;cout << A;)
- 实数判相等时一定要做差去绝对值。
- C++开数组如果是[n][m],其中m<n时,可以这样:[m][n]来开。似乎空间寻址会快。(常数小优化,还比较有用)
Part 3
关于NOIP比赛策略的一二事(时间:2020NOIP退役赛前夜)
- 一定要大脑清晰!一定要大脑清晰!一定要大脑清晰!
- 一定要审清题目!一定要审清题目!一定要审清题目!
- 一定要打满暴力!一定要打满暴力!一定要打满暴力!
- 一定要心态平和!一定要心态平和!一定要心态平和!
- unsigned long long的正确用法
(€€£不干人事) - 对拍的正确用法(也不知道暴力选手的我用不用得上)
- “模拟不能算黑……黑题……NOIPT1的事,能算黑么?”
- 不会做就打表!打完表就找规律猜结论!
- 数学题就看灵性了,应该不会有什么奇怪的反演把~
- 遇到不大会的题先去想想贪心、转化、构造,说不定就能从一些奇妙的结论中发现正解。
- 实在不会就DP吧,NOIP打DP还是有前途的。
- 打线段树就必须对拍,不对拍就是0分。
- 写题前先把思路理在草稿纸上,以免越打越乱(尤其是模拟)
- 上厕所有益身心健康。
- 文件名、文件夹、我不要当要素过多人!一定要留下10~15分钟开始检查文件,以防爆炸。
听说过程名%%队爷能够提高RP哦!- 切T1+T2T3T4高分暴力即可(T4一定有坑,切莫以为自己能够切掉)
- 有一说一,不懂就问!
- 不能相信大数据(你永远不知道出题人构造大数据的同时在做些什么)
- 吃好睡好,考前别喝coffee。同时带上些巧克力,不仅能补充能量,还能放松心情,更可以馋哭隔壁的小朋友。听听纯音乐放松放松就上战场了吧。
小结:
最后一次停课,最后一次在比赛时怒敲键盘,最后一次对着题目感受时间的飞逝。
回想起第一次普及组比赛时的兴奋,懵懂无知;第二次提高组比赛时的紧张到碎不着;到现在的平静如水,好想放声大哭一场。
实力不行,省队什么的是奢望。现在我只想保存我那些日日夜夜在机房的欢声笑语在我心中。
最后一役,我将在寒风中怀抱温暖,放飞自我。
加油!NOIP2020!