Fork me on GitHub

一些ACM注意事项

这个注意事项来自于我一个目前正在读高三的noip的朋友,这是他总结的一些对自己noip比赛的总结,我希望借过来对我的ACM比赛有一定的好处。

注意事项

1.暴力+玄学优化正解骗分法(即判断数据规模if(n<=xxx) 用暴力法,else 打上自己的不确定算法)
2.定义long long保智商
3.快速读入是个好东西
4.多组数据记得初始化变量和数组。
5.习惯用#define,这会让你的代码好写许多:
比如(参考大佬习惯):

#define ll long long

#define R register int//一开始我也不知道是什么,但后来查了,原来是将一个变量存到cpu的位置,
调用就快很多,而且听说内存也可以减少?但不能这样定义太多变量,一般for循环时定义一下即可。

#define il inline

#define N 100005//这里的N一般是用在数组上的,如int f[N],c[N];这样改大小时,只需对N进行操作。
6.若不是必须返回值的函数,最好用void,而且据我看大佬的习惯,他们通常用在函数类型前加个inline,虽然我也不知道有什么用,但据说调用会快一些。
7.全局变量默认为0
8.打分号,括号,return 0。
9.同名变量导致混乱:最简单的办法是保证每个变量都不重名,忽略大小写之后仍然不重名。
10.能打scanf和printf就别用cin和cout,因为后两者较慢。(我才不会告诉你我平时开了std::ios::sync_with_stdio(false);然后接着用cin和cout
11.if的== (解决方法有1.开-wall来 续命 2.换成如2333==a型)
12.编完成程序后,先检查循环体有没有写错,主要是变量那里,自加和自减搞反,会让你想死。
13.字符串输入多打几个scanf(我才不会告诉你当初被scanf秀了一脸)
14.检查的几个习惯:
查死循环:找到循环体,然后在开头加上printf(“Orz”);要是运行后不停出现Orz,就说明是这里有死循环。
查某语句是否使用:在该语句下随便加上输出某段话的代码。
查变量就不用说了吧,输出即可。
15.中间值溢出:lcm = ab/gcd(a,b); 如果a和b都比较大,很容易发生溢出。(正确写法 姿势 lcm=a/gcd(a,b)b)
16.格式错误、文件名错误、文件放错位置……:这些错误的原因都是没有审好题,没有认真查看主办方的规定。所以,大家千万不要犯此类错误!
17.调试代码在不用时,不应该直接删除,而是应该注释掉,以免给重新使用带来麻烦。
18.做大改动时记住ctrl a,c,v存一份
19.认真审题
20.关于==误写成=,直接把右值写在左边就好了。比如a==3写成3==a,这样即使写错编译器也会报错
21.双向边数组开两倍,线段树四倍之类的……
22.断言(assert(), 在头文件中), 当表达式为假时强行结束程序,并给出错误信息(另一种方法是if(表达式){printf(“ERRORmsg\n”); abort();})
23.不要作死直接把大样例贴到exe里,有些垃圾机子会崩,考试崩机子会怎样不用我说了吧(正确打开方式:写个文件流来读写大样例)
24.拿到题目后建议先花半个小时左右的时间,把所有题目都看懂,每道题都仔细想一想。
25.使用草稿纸,有用的性质都可以记录下来,零散的思路也可以画下来,这很有助于思考。

最后

有效的程序员不应该浪费很多时间用于程序调试,他们应该一开始就不要把故障引入。——Edsger Wybe Dijkstra。

我一定要变强啊!!!

-------------本文结束感谢您的阅读-------------