ACM竞赛编程中几点要注意的。

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值,然后再去作数组下标。

posted @ 2015-08-13 21:42  站在边缘的人  阅读(359)  评论(0编辑  收藏  举报