Acm踩过的坑

解题思路:

1,思考问题的解决方案的时候,应该先考虑到最笨的方法,然后计算时间复杂度行不行,如果太高,考虑能不能优化。怎么优化呢?一般N在[10000,1000000]的,是nlog(n),再大的,复杂度就该是n了,二分减小复杂度?动态规划减小?记忆化搜索?先排序再搜索?等等各种方案,如果还是想不到好的优化方案,那么,就是这个题目里面有个规律你没有找出来,你要列各种数据,放开脑洞,想各种可能性,通过假定最终解决方案啊,找最终解决方案的特征啊,或者最终解决方案的形成过程中是不是有规律可循啊,是不是问题某个隐含的条件你没有找到啊,总之,如果自己想不到好的优化方案,那么自己能做的就是去找规律,找最终答案的规律,总结最终的答案的特征,是不是有普适性啊,是不是有特殊性啊,不能发愁,如果还是找不到,那么好,果断放弃。
2,想到一个解决方案了后,不要着急写,要放开眼光,用数据证明你的想法是不是对的,而不是代码都写了一半甚至快写完的时候,发现,思路错误,这就坑了,所以,要坑早坑,不要最终才踩坑,五个小时,时间有点紧。。

总结:

  1. 定义数组的时候,比如int array[3]={0,1,2,3},就算array[0]不用,也不要定义成了int array[3]={1,2,3}
  2. 认真读题,不是所有的输入输入都明确表明了输入数据的数据类型,不是所有的数都默认是整数,万一输入数据是double就坑了
  3. 认真读题,如果给出了一个范围,比如给你一个连续的整数,也不一定是从小到大或者从大到小,一定做好判断才行
  4. Output Limit Exceeded可能是因为没有按照要求读入数据,比如本应是double读数据却用了int,还可能是因为应该用%lld却用了%I64d
  5. 如果先读整数再读字符串,读完整数后要记得getchar()(或者cin.get())读掉‘\n’,如果读整行字符串可以用gets()(或者getline(cin,string))
  6. 输出的格式一定看清楚,避免PE,比如有的题目要求输出Case 1:,有的要求两个结果之间有一个空行(或空格)(这和每个结果后是一个空行(或空格)完全不一样!!),有的要求精确到小数点两位,一定不能因为PE扣分!
  7. strncpy(char *src,char *des,size_t n)不会自己加上‘\0’,所以要记得加上,不然会坑
  8. 如果题意说是整数,要考虑会不会可能是大整数,不然可能会WA
  9. !!!读题的时候,一定把临界点想清楚!!!!bug就很可能出在临界点上!!比如HDU1203题,输入数据可能是

0 1
0 0.2

即,有的学校不需要交费用就可以申请!·!!虽然是个简单的背包+简单概率,但是!!找了好久bug啊,坑

  • 每一句代码都应该仔细考量,精确到每一个等号或者大于号!
  • 又让数据类型坑了!!!!本来应该用long long却选了int,坑啊,要哭了啊,浪费我五个小时啊!!!

    10,memset也占用很多时间,请谨慎使用

你可能感兴趣的:(ACM)