首页 > 其他分享 >注意事项

注意事项

时间:2023-12-08 09:02:50浏览次数:28  
标签:函数 线段 tree add 注意 注意事项 时候

在这里列举一些代码中经常出错的问题以及一些代码技巧。

  1. \(head\) 数组一定要初始化为 \(-1\)(如果死循环很有可能是这里的问题)

  2. 建图要考虑建双向边还是单向边。

  3. 有向图 \(Tarjan\) 的时候不要写成 if(u == dfn[u])

  4. 存图的数组要多开几倍。

  5. 函数名首字母尽量用大写,以防重名。

  6. 用 \(double\) 计算时一定要考虑精度问题,特别是二分的时候。

  7. 除 \(void\) 函数以外的函数一定要有返回值,特别是 \(bool\) 类型函数,不然会自动返回 \(0\)。检查返回值是否正确。

  8. STL 里的数据结构时间复杂度要带一个 \(\log\) 或者带一个常数,谨慎使用。

  9. 模 \(1e9 + 7\) 的时候不要写成了模 \(1e9+10\)。

  10. 直接枚举子集可能会 \(TLE\),可以这样优化for(int j = i & (i - 1);j;j = (j - 1) & i)

  11. 不要开 \(1e6\) 个 \(deque\) 然后喜获 \(MLE\)。

  12. 注意 \(memset\) 的用法,可能会 \(TLE\)。而且注意应该手动赋值还是用 \(memset\)。

  13. 用 \(sqrt\) 的时候,要注意精度误差之类的问题。

  14. 分块的时候注意是 \(i\) 还是 \(l\),是 \(i\) 还是 \(pos_{i}\),需不需要加/减懒标记。

  15. 分块的时候要分清自己要求的是块内的还是整个序列上的,需不需要减 \(lid_{i}\)。

  16. 写分块或者线段树的时候记得写 \(init\) 和 \(build\)。

  17. 线段树注意 \(pushup\) 和 \(pushdown\) 的位置,\(pushup\) 在 \(build\) 和 \(add\) 最后,而 \(pushdown\) 在 \(add\) 和 \(query\) 的中间。

  18. 注意计数题要不要取模,在什么地方取模,取模有没有取干净。

  19. 注意指针移动应该是 \(pos++\) 还是 \(++pos\)。

  20. 树剖查询和修改往上跳的时候是 \(u=fa_{top_{u}}\) 而不是 \(u = top_{u}\)。

  21. 线段树修改懒标记的时候应该 \(tree_{ls}.add+=tree_{id}.add\) 而不是 \(tree_{ls}.add=tree_{id}.add\)。

  22. 当线段树既要区间加又要区间推平的时候注意懒标记的处理。

  23. \(double\) 类型返回值的函数不要写成 \(int\) 了。

  24. 注意做除法的时候要不要保留小数,有没有保留小数。

  25. 线段树记得开四倍空间(除非是查理线段树)。

  26. 模拟退火用 \(exp\) 算接受劣解的概率的时候注意有没有算反,有没有 \(delta = 0\) 的情况.

  27. 模拟退火或者其它时候生成 \(1-n\) 中的随机数是 rand() % n + 1 而不是 rand() % n

  28. 不要将 \(==\) 写成 \(=\),否则会赋值。

  29. 注意循环层数很多时要分清楚下标到底是谁,\(i\) 还是 \(j\) 还是 \(k\),不要弄混了。

  30. 按照双关键字排序的 \(cmp\) 函数是 y < t.y 而不是 x < t.y

标签:函数,线段,tree,add,注意,注意事项,时候
From: https://www.cnblogs.com/Creeperl/p/17884400.html

相关文章

  • 小新Pro13 新手安装linux 注意事项
    家中有闲置的小新,是A卡正好合适装linux安装前关闭安全引导通过关机键旁边的重置口重新开机OR在开机界面按F2(开启Hotkey模式的要按Fn+F2)进入BIOS设置界面,关闭SecureBoot,这样方便安装linux系统刻录linux有很多发行版大家可以自行选择,推荐Ubuntu,相关资源比较丰富。我......
  • 网口设计注意事项
    网口设计注意事项PHY与网络变压器接法通用MCU(CH32V203RBT6、CH32V/F208、CH32V307、CH32F207)BLE(CH577、CH578、CH579)接口芯片(CH9120、CH9121、CH9126、CH392、CH395)变压器接法:变压器中心抽头接VCC接口(CH390、CH182)变压器接法:变压器中心抽头接对地电容终端电阻介绍高频......
  • jfinal2.2在idea用main运行注意事项
    1.用new->projectfromexistssource方式,用maven方式导入2.jfinal2.2使用8.1.8的jettyserver,pom使用compile<dependency><groupId>com.jfinal</groupId><artifactId>jetty-server</artifactId><version>8.1.8</version&g......
  • Python转C选手常见问题与注意事项
    1强制变量转换的不同含义Python的int(s)转换的是对应的数字,而C语言转换的是对应的ASCII编码,如:Python的强制变量转换s='0'a=int(s)print(a)#输出结果为0s='a'a=int(s)print(a)#程序报错C的强制变量转换s='0'a=int(s)printf("%d",a)//输出结果为48s='a'a=int(s)......
  • Vmware 安装 Windows11 的一些注意事项
    1概述在使用Vmware进行安装Windows11操作系统时,发现没有安装Windows其他版本那么顺利,本文记录一下安装过程中的几个坑。2详情1)Vmware的访问控制默认是不加密的,安装Windows11时,必须为其设置密码进行加密,设置的这个密码需要记住,以后再进入虚机的时候需要输入此密码。......
  • PageHelper插件注意事项
    PageHelper插件注意事项使用PageHelper.startPage后要紧跟查询语句下面的代码就有可能出问题:PageHelper.startPage(10,10);if(param!=null){List<Data>data=dataMapper.select(example);}因为如果param==null,那么就会导致设置了分页插件但却没有执行查询,此......
  • 指针的注意事项
    1.如果在代码里面这么写char*cp="123";...if(*cp)...if(!*cp)...第一个if指cp这个指针当前指向的地址是否是cp最开始指向的字符串的有效位里面(不包含'\0')第二个if当然就是反过来了2.如果常量指针(const)要赋值给普通指针,必须加上显式类型转换,比如constint*p=&x;int*......
  • Jmeter 中的公式与注意事项
    一、jmeter中的常用计算公式1.Ramp-Up时间:NumberofThreads(线程数) /Ramp-Up,表示每个请求间的间隔时间,当Ramp-Up为0时表示同时并发2.TPS=完成的事务数据/完成这些事务数所费时间(当使用了事务控制器);TPS=完成的请求数/完成这些请求数所费时间(未使用事务控制器)3.QPS= ......
  • 锚索测力计安装方法和注意事项
    锚索测力计安装方法和注意事项锚索测力计的安装方法根据具体情况和需要而有所不同。以下是常用的几种安装方法: 1.直接固定法:将锚索测力计直接固定在锚索上,然后测力计与数据采集仪器连接,进行测量。2.间接固定法:将测力计与一定长度的小型钢绳或张力杆相连,然后将钢绳或张力杆......
  • 记录达梦8安装过程与一些注意事项
    最近项目中使用到达梦数据库(开发版),安装时总是忘记一些比较重要的,常用的参数,所以记录一下.环境:CPU:鲲鹏arm64系统:银河麒麟服务器版V10SP3下载达梦数据库打开达梦数据库下载页(可能需要登录)找到DM8开发版,需要选择安装的机器的CPU平台和系统,再点击下载......