总结反思
刚刚接触了Virtual Judge,做了几道题,感觉并不好(手生了)。总结了一下所犯的错误。
1.细节
诸如把>
写成<
,或者函数名抄串行之类的错误就不多提了,满满的都是泪啊~~~
但是还是有一些隐蔽错误的:
#define max(x, y) (((x) > (y)) ? (x) : (y))
...
ans = max(ans, search(2 * n, l, (l + r) / 2, fl, fr));
第二句中,max
这个宏会被展开,然后search
这个函数就会在最终的代码中出现两次,然后就会执行两次,然后就TLE了……
2.long long
很多题给出的数据范围貌似并不用long long
,但极限情况下的确会爆int
。个人感觉
108
以上就开long long
算了。
另外,也有中间结果用int
,答案累加要用long long
的。
最后一点,在跑快速幂之类用位运算的时候,int
溢出会导致符号位变成1
,能坑死你。
3.OJ
POJ 的 G++ 比 C++ 慢,BZOJ 开在 Linux 上,uint
之类的都是库里头的东西,而在 Windows 下的 G++ 里有都没有,所以变量名函数名别起太专业的,实在不行用拼音算了,挂个CE挂难看的……
另外,BZOJ 的题面简直没法看,还有的压根就是错的,建议做之前先百度题面。
附:
BZOJ1060时态同步 中间结果要用int
,最后结果用long long
输出,否则会WA。PASCAL的自己想办法吧……
BZOJ2190仪仗队 有多组数据,题目没说。