ACM常犯错误小结

来源:互联网 发布:重启后自动还原的软件 编辑:程序博客网 时间:2024/05/01 00:25
1.未考虑各个数据的溢出;
2.输出格式与题意不同,出现误差;
3.使用数组时,在第一次使用后,未对数组清零;
4.在判断时,未考虑或考虑不全 对于是否改在不等式中取等号;
5.混淆循环,使得不能进入循环或出不了循环;
6.对于二维数组,混淆行列;
7.对于动态变量的改变,考虑不足;
8.基本的数学概念,例如:根号内为正,素数不包括1。。。
9.高精度数据求余时,可能会出现100001%100!=01but==1;
10.注意一个数组的起始处应该在哪。
11.多次提到一个数的时候最好用宏定义。
12.sscanf是括号内(str,"%d",&n):str数组内的数字移向n,而sprintf(str,"%d",n);则刚好相反。
13.最基本的数据公式输入错误(虽然机会挺小的,但代码一多就容易出状况- -#)。
14.printf("%*c",n-i,c)代表了在输出c这个字符之前有n-i个空格。
15.%*c代表对于输入数据读入但是不做处理。
16.采用for:i->v.....0是为了防止回溯,出现一组数据多次使用。
17.DP其实和递归还是有那么一点相通的,有时候可以试着用DP的想法去做递归。
18.光练不学,傻把式;光学不练,傻把式。
19.oxfffff代表的是很大的值,f指的是16进制中的15。
20.堆和栈的操作有点类似,都是empty()、pop()、top()、push()、size()。
21.全排列next_permutation HDU 1027 PKU 3187 1146 1731


全排列
杂谈 分类:STL 
这个函数可以计算一组数据的全排列
假设数列 d1,d2,d3,d4……范围由[first,last)标记,调用next_permutation使数列逐次增大,这个递增过程按照字典序。若当前调用排列到达最大字典序,比如dcba,就返回false,同时重新设置该排列为最小字典序。
返回为true表示生成下一排列成功。
另外,库中另一函数prev_permutation与next_permutation相反,由原排列得到字典序中上一次最近排列。
22.gets()会自动处理掉输入进来的'\n'。
23.scanf()会自动处理掉输入进来的'_'——空格。
24.while(gets(str),strcmp(str,"END")!=0)   ==   gets(str); while(strcmp(str,"END")!=0);
25.memset(a,127,sizeof(a)); a[0-->n]=很大的数。这个知道就好,千万不要使用,教训啊,用这个我提交了13遍2293啊,郁闷呐!!!!
26.STL头文件里面含有INT_MAX这个数。
27.10000000000000LL是long long 中的最大值, 即2^63  
28.map是红黑树。很高级,但是很慢,他的每个节点储存的是一个字符串,故做不了hdu的1075。
29.cout输出的时候,2.30会变成2.3,所以用cout输出时会耗时较printf多
30.对堆进行操作的时候,插入是从下往上更新,删除是从上往下更新。
原创粉丝点击