ACM Attention
读题
读题一定要仔细,尤其是样例很水的时候,直接看输入输出是一个坏习惯
注意题目的时限和内存要求,对于某些问题,时限和内存得要求很特殊
读题的时候最好讲题目表打成数学公式,有利思考
大模拟之列最好画图标,简介的表示一下问题
注意输出的格式,精度要求,和单词拼写
思考
没思路
- 程序的范围基本已经暗示了本体用什么算法去做
- 不妨多推几个样例,找找规律,有些题目可能就是找规律
- 谢谢数学公式,将公式变换一下,可能就找到了压缩复杂度的方法
- 区间 [a,b] 的问题可以转换成 [0,b]−[0,a] 的问题
- 暴力吧暴力,七分天注定,三分靠胆量
有思路
- 不要觉得这题和以前做过的题目类似就会了,可能小细节的变动会让做法完全不同
- 考虑问题一定要补充不漏
- 注意一下细节问题,如溢出等等
- 思路了然于胸的时候再动手编程
编程
溢出
问题: i∗i<longlong 时,很有可能因为 i∗i 溢出而死循环
对策:最好将变量全部设置成 longlong
初始化
问题: vector<int>,map<int,double> ….在多组样例的时候一定初始化
对策:最好在一组输入开始的时候就初始化
栈,队列弹出
问题:
stack<int> Stack;
....
while()
{
Stack.push();
....
Stack.pop();
}
在没有检测 Stack 是否为 empty() 就直接 pop() 很容易 RE
对策: stack,queue.. 类似的数据结构在 pop() 之前一定要检查是否 isempty()
浮点型输出
问题:有些题目要求四舍五入,有些题目要求舍尾
对策: printf() 默认为四舍五入,当然对于特殊精度的四舍五入我们可以 +0.5 ,而舍尾我们可以转换为 int 再输出
向前遍历
问题:向前遍历的时候很容易写成 i++ 造成死循环
对策:一定要记住向前遍历是 i−−
常量类型
问题:系统默认是将
1
当成
对策:尽量将 double,longlong 类型的变量放在前边,迫不得已时 double – 1.0 , longlong – 1.0LL
以两个0为EOF
问题:以两个0为EOF
写成:写成 N+M==0
逻辑短路
问题:
C
语言中
对策:知道问题后多注意注意
其他
- 仔细想一想,有没有除了分类讨论之外的方法,分类讨论很容易 WA
- 以最坏的情况推测输入,如给出区间 L,R 注意题目没有说明的话 L>R 也是有可能的
- 在没有提高复杂度的情况下,简洁比性能更重要
- 不要用类,用结构体
- 对于一个值 Ai 可能有几次输入,注意选取一个最优值