进考场第一件事
关闭360
关于知乎
关于数组:
数组名写错莫名全WA/RE,样例还过了
写对拍就可以避免
打表打了53个数组,循环到55,莫名全WA
如果开了二维数组,可能在比较大小时候只调用了一维。
例如d[][]
二维数组,你可能写dij时写了d[x]+1<d[y]
,这个-Wall
都救不了你。
关于MLE:
就算给了你1个G空间也要算一下。
算空间技巧:在main函数开头加上printf("%f
", sizeof(arr) / 1000000.);return 0;
就可以输出arr的大小。
一般只输出空间复杂度最大的数组。
注意不同平台指针数组的差异,64位机子是8字节,32位机子是4字节。
关于平台差异:
NOIP让用clock(),但是最好别用//为啥让用,因为我真的试过
Linux下CLOCKS_PER_SEC
和Windows下好像不一样(反正知道Windows下好像是1K,Linux应该是100W)
注意模拟退火、造数据时候Linux下rand()的范围是[0,0x7FFFFFFF],而Windows下是[0,0x7FFF]
可以除以一个(double)RAND_MAX获得一个[0,1]内随机实数
Windows精度不够可以写ran30()=(rand()<<15)|rand()
关于long long:
涉及乘法、取模的可以在暴力程序#define int long long,正解程序该怎么写怎么写
对拍时候把数字的范围开满跑
如果正解过了,可以把正解#define int long long复制一份当暴力,把所有数据范围都开满对拍
在CCF的32位老爷机上,int比long long快好多
关于多组数据:
用一组相同的数据复制多份跑一遍,如果多次答案不一样那肯定是出锅了
用两组数据(规模差异尽量悬殊)交换着来,如果答案不一样肯定是出锅了
多组数据不能开static(例如邻接表加边的tmp)//我会说我不会在main里调用别的函数的static吗
关于CE:
按照C艹标准来。
如果来了-Wpedantic
+ -Werror
都没有CE,那么基本上是不会CE 了
在NOI Linux下测一遍。
关于头文件:
#include <bits/stdc++.h>
using namespace std;
如果bits不让用,那么
打开bits,把整个头文件复制进来
先什么头文件不加,然后一遍一遍CE一遍一遍加
注意y0 y1 yn j0 j1 jn
关于对拍:
建议用ghj1222的标准对拍板子
编译开关
-Wall
一定要加
强推-Wshadow
将局部变量覆盖全局变量暴露出来
-Werror
将所有警告视为错误
NOI Linux
HE
在桌面上有一个VMware的图标,双击打开之,打开虚拟机。
虚拟机密码123456。
进入虚拟机后,按Ctrl + Alt + T
打开终端
在终端输入vim
可以打开编辑器之神,强烈推荐
或者是nano
打开轻量级编辑器
gedit
打开GUI编辑器
emacs
打开奇怪的编辑器
左上角菜单里有GUIDE(不太好用)、宇宙最强调试器DDD
虚拟机桌面上的noip快捷方式是Win7里的E:
oip
或者是虚拟机的mnthgfs
oip
终端输入cd
显示当前目录/跳转目录,ls
列出所有目录下文件
diff
对拍比较文件 clear
清屏
重要的事情
注意审题,审题审错了打暴力对拍都救不了你,真的。
关于心态
心态不好可以去跑几圈,燕大的操场应该是不错的