ACM竞赛编程中几点要注意的。
2015-08-13 21:42
267 查看
0x01: 如果开的数组足够大,那么应该作为全局数组来开,这样可以防止stackoverflow(栈溢出)
0x02:在输入的数据量较小的时候可以随意使用cin/cout 或者 scanf/printf , 但是在题目明确有大量数据输入的时候,请务必使用scanf/printf ,而有些情况下还必须要使用输入外挂才能过(这种情况碰的比较少)。
0x03:在字符串处理当中,如果在知道长度的情况下,还是优先使用数组,其次才是string类。stack、queue之类的同理。
0x04:在判断两个double类型数的时候,因为double存数据的时候是存在误差的,位数大的情况误差还可能比较大。所以,使用"=="来判断两个浮点数是否相等不靠谱的。靠谱的做法是:判断两个浮点数a,b 的差值是否在一个范围之内。if( fabs(a - b) < 1e-6) ,具体的这个差值应该设为多少应该看具体情况来定。
0x05:很多时候我们需要判断一个数是否为整数,但是使用 if(n%2 == 1) 的做法是不靠谱的,因为在n为负数的时候会得出错误的答案。靠谱的做法应该是使用if(n%2!=0)或者更优雅的做法if (n & 1 == 1).
0x06:有点时候可能需要统计字符串中每个字符出现的次数,可能会开一个整型数组,然后使用char值做下标的方法来存每个字符出现的次数。但是这个是应该意识到char的范围是-128~127,那么char值为负的时候就会出问题了。那么靠谱的做法应该是,直接先把字符强制转型为unsigned char值,然后再去作数组下标。
0x02:在输入的数据量较小的时候可以随意使用cin/cout 或者 scanf/printf , 但是在题目明确有大量数据输入的时候,请务必使用scanf/printf ,而有些情况下还必须要使用输入外挂才能过(这种情况碰的比较少)。
0x03:在字符串处理当中,如果在知道长度的情况下,还是优先使用数组,其次才是string类。stack、queue之类的同理。
0x04:在判断两个double类型数的时候,因为double存数据的时候是存在误差的,位数大的情况误差还可能比较大。所以,使用"=="来判断两个浮点数是否相等不靠谱的。靠谱的做法是:判断两个浮点数a,b 的差值是否在一个范围之内。if( fabs(a - b) < 1e-6) ,具体的这个差值应该设为多少应该看具体情况来定。
0x05:很多时候我们需要判断一个数是否为整数,但是使用 if(n%2 == 1) 的做法是不靠谱的,因为在n为负数的时候会得出错误的答案。靠谱的做法应该是使用if(n%2!=0)或者更优雅的做法if (n & 1 == 1).
0x06:有点时候可能需要统计字符串中每个字符出现的次数,可能会开一个整型数组,然后使用char值做下标的方法来存每个字符出现的次数。但是这个是应该意识到char的范围是-128~127,那么char值为负的时候就会出问题了。那么靠谱的做法应该是,直接先把字符强制转型为unsigned char值,然后再去作数组下标。
相关文章推荐
- C++中的this指针
- C/C++/Java/C#/Python的内存管理机制整理
- Spring---IOC应用
- 黑马程序员-----------C语言基础-----------数组
- C++ STL::bitset
- [转]详细解析Java中抽象类和接口的区别
- 【Struts2学习笔记-6--】Struts2之拦截器
- mod_tile编译出错 -std=c++11 or -std=gnu++11
- 推荐!国外程序员整理的 C++ 资源大全
- ASP入门(九)-Request对象小案例
- Java基础 for 语句嵌套 记录和练习
- Java 基础 for循环基础练习记录
- python 一些有趣的模块
- Java 基础 for 和 while 的学习记录
- C小加 之 随机数(去重) C++ string之unique(),erase(),sort()使用小记
- Java 基础 if和switch 练习记录
- java(08-13)
- C++里单例模式的实现
- 黑马程序员-----------C语言基础-----------进制
- 数组的常用算法(3) - 哈达玛矩阵