一、做题习惯
1)首先先对照样例看自己的理解是否有误;
2)敲代码前先验证思路的正确性与可行性,最好可以把思路简单地记录下来,以方便实现代码时条理清晰;
3)各种换方式、换思路、或是优化前记得备份修改前的代码;
4)提交前对于递归等不易计算时间复杂度的情况,实验一组较大数据看能不能跑过;
5)最后记得检查调试内容是否全部注释掉了!
二、各种细节
(一)关于输入输出
1)输入输出一定要注意和题中要求的是否一样(注意区分0和O、大小写、标点等,最好使用复制粘贴);
2)输入输出较多记得进行读入优化;
3)数据大时屏幕输不下,用文件输入输出;
4) system("PAUSE"); 用于暂停屏幕,有时很有用(调试);
5)char int long long string 混着来的时候还是scanf保险、虽然慢了点,总比未知错误强(相比快读或是关同步cin);
(二) 关于初始化
1)注意检查每个数组(的每个维度)大小是否都开够了(特别是一些经过处理变大的数组@线段树开4倍);
2)变量同上,可能会用到long long就一定要用;
3)数据有多组(且要求分别独立处理)是一定把每个变量都初始化、且一定要在正确的位置上初始化;
4)数组赋(极大或极小)初值,要么 for(int i=1;i<=n;i++)a[i]=(1<<30); ,要么 memset(a,10,sizeof(a); ,而不是 memset(a,(1<<30),sizeof(a)); ;
5)各变量注意不要重名,尤其是不同类型的变量;
(三)其他
1)循环嵌套时不要混淆循环变量的名称(如 i 和 j 、m 和 n);
2)关于DP:
*是否能覆盖全部状态?
*求解后面状态时是否保证前面状态已经确定?
*是否修改了已经确定的状态?
# 不要因为是练习就草率应对、碰运气式的去提交。
# 第一次wa就意味着你这道题的锻炼机会失去了。
# 即使你敲得再长,即使你再用心,你不查错,你考虑不全面,那么还不如不实现。
# 珍惜每一道题的处女性,使每道苦战的题都有其价值。