写代码中需要注意的事项!(停更 有些表达很不准确懒得改了)

1. 数组不越界、下标不能取负数(特别注意取%时进行加减运算时可能产生的数组越界问题)(循环是也容易出现问题)

2.n<=2*10^9都可以放心使用int的

3.dp时间复杂度在无优化的情况下通常为O(n^2),因此应根据情况合理使用搜索

4.数组开到10^9会爆掉。因此可以使用map进行代替。没有赋值(?)的map初始值为0

5.(尤其是图论题)带空格的输入一定用get,且第一行若输入数字需要吃回车

6.一定考虑极端取值(0,1)是否对应着特殊的解法(e.g.当取某些值时你的求解循环没有循环?for (int i=0;i<n;i++) 若n=0则可能出现未输出答案等问题)

7.数据范围较大时一定记得使用long long. 且输出结果为long long时用printf一定要注意("%lld")

8.数字超出数据范围会变成负数表示。因此如果想判断所取值是否过大(超出ing/long long范围)(乘法尤为多见)时不仅要保证此数小于该数据类型能取到的的最大值,还有注意不能使负数(根据实际情况)

9.开数组时不要写少了0啊。。。养成写const int的好习惯。用科学计数法。要不然re真的很亏啊

10.scanf效率远大于cin.因此尽量使用scanf(尤其是输入的数据量>=1e+6)不然输入超时就十分可惜了。

11.一定注意检查输出格式。什么每行输出**个,从小到大,字典序,换行符之类的错了非常非常非常可惜啊。。。特别是那种样例给的比较恶心正好能过的。 

12.写hash函数是最好写成Hash

13.除数不能为0。。。取模运算也许注意 不然会re

14.写循环的时候一定要多想一想是否可能某些特殊数据会使该循环不运行??如果是的话是否会对答案正确性造成影响(此时需特判)

15.有时候写邻接表可能会mle。。。所以如果对于n个点中的每一个和另外m个点均有一条边的话可以考虑用一个cnt(虚拟点)中转一下 那么空间复杂度就从n*m变成了n+m 大大减少内存的浪费

16.多测时一定记得每次初始化/清空数组和队列等

17.写printf别漏掉换行符

18.循环check时一定注意有没有第一个/最后一个没有被check(需要特判)

19.考虑n的奇偶性是否会影响题目解法

20.题面中给的隐藏“样例”也要试一试哇

21.图论等多考虑起点终点在一起等特殊情况(就和其他题多考虑n=0,1之类的情况一样)

22.想清楚再开始写很重要!不然真的很浪费时间orz。最好状态时思考良久后一气呵成,正确率也会较高

23.a.begin() a.end()返回的是迭代器

24.遍历map:for(map <string,int> :: iterator it=mp.begin();it!=mp.end();it++) it->first:第一个元素 it->second:第二个元素

25.为防止数组越界等的特判一定要对照常规做法 看看有没有把需要(能)执行的全部执行

26.最大最小:优先考虑二分答案(一只总是不会往二分想的菜鸡) dp 最短路

27.涉及到取与不取考虑背包

28.一定要考虑答案是否具有单调性(有很多计数题可能符合条件的数也是具有单调性的)

29.要打印路径的dp题的话状态中表示考虑到第几个通常就要取第几个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值