1.用cin输入流和scanf函数读入数据消耗的时间是不一样的,当数据量很大时,用cin可能会超时,所以尽量用scanf输入。
2.出现 runtime error 可能原因:
①除以零。
②数组越界:int a[3]; a[10000000]=10;
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];
⑥提交前忘记删掉stdin那一行。。。(亲身re十次的惨痛经历)
3.万能头文件:#include<bits/stdc++.h> 只要写这一个头文件就不用写别的了,但是提交的时候要选择GCC编译器。
4。对于不同的编译器,即使是相同的代码也可能会出现Accepted和Wrong Answer或者是time limited exceed(超时)这样的天差地别,所以没头绪的时候要考虑有没有可能是这个原因。
5.int 型的数计算结果只能是int 所以比如i*i<m这种判断语句如果m为long long int 的话就会出错,所以要把i也改成
long long int 。
6.输出长整型数时用%lld和%I64d结果可能会有所不同,一般用%lld效果较好。
7.找不出bug时,可以在网上搜AC代码,然后写一个随机生成测试数据的程序,再写一个程序比较输出结果有哪些不同,从中分析原因。
8.读取字符串中提取数字时,不要忘了减去48 。
9.负数取模时,题会默认结果为正数,如(-2)%7=5,但是电脑计算的时候,会使(-2)%7=-2,导致出错,要在后面加一句if(ans<0) ans+=7;
10.当遇到只能通过第一组样例时,往往是由于使用过的变量忘记初始化,
11.开发工具中运行到一半程序突然崩溃可能是scanf函数忘了加&,或是数组越界了,还有就是定义的函数没有返回值出口。
12.memset可比循环更快初始化数组,在多维数组中更为方便。
13.线段树中用于线性存储名字的数组要足够大(4*n)。
14.a乘2可以写成a<<1;
15.endl的运行时间可能比'\n'慢一些。
(持续更新)