各种trick和细节错误汇总
这篇博客主要是用来记自己写代码的时候犯的各种小技巧和低级失误,好提醒自己,从而尽量缩短debug时间。
点分治
1.求每一个子树到重心的距离的函数接口应该是dfs2(v, eg, e[i].w)而不是dfs2(v, now, 0)。一方面是子树的父亲是当前的重心,而不是进入这一层点分治的点;另一方面别忘了考虑这条边的贡献。
2-SAT
1.建图一定要考虑对称性,即“如果\(x\)成立,则\(y\)必须成立”,那么我们还得考虑如果\(y\)不成立,则\(x\)也不能成立,比如[NOI2017]游戏。
哈希
1.觉得有必要的话最好写一个双哈希,防止出题人卡自然溢出。
2取模版哈希在算子串哈希的时候也别忘了取模,要不然就有负数了。
3.哈希表是真的快!尽量用哈希表代替map,防止被卡常。(比如[NOI2016]网格,刚开始用map有两个点怎么卡也卡不过去,改成哈希表后只用了300多ms)
主席树
1.查询的时候,判断是否往右走的条件是根据左区间而定,即t[t[now].ls].sum - t[t[old].ls].sum,千万别手滑写成了t[now].sum - t[old].sum。
线段树
1.较复杂的线段树一般需要推推式子才能知道要维护啥。推式子时有一个技巧,就是下标尽量都保证是全局的编号,而不是某一个区间中的第几个,这样区间合并的时候往往会简单的多,不用考虑两个区间的左右关系,比如[HAOI2012]高速公路。
数论,数学
1.万一遇到某一个题过程中要求组合数却不能取模,可以尝试取log,最后再用exp()转换成真正的值,比如HDU4254 A Famous Game。
2.求两个数的lcm的时候为了防止爆int或long long,要先除以gcd,再乘以另一个数。
3.组合数一定要特盘\(m > n\)的情况,尤其是Lucas定理的时候!
lucas定理
1.在一篇博客上看到lucas定理可以不用递归,而是每次把\(n\)和\(m\)都除以\(p\)直到0。有如下代码
In ll C(int n, int m)
{
if(n > m) return 0;
return fac[n] * inv[n - m] % mod * inv[m] % mod;
}
In ll lucas(int n, int m)
{
if(m > n) return 0;
ll ret = 1;
for(; m; n /= mod, m /= mod)
ret = ret * C(n % mod, m % mod) % mod;
return ret;
}
**高斯消元**
1.对于每一次的主元,我们要找最大的数那一行,为了减小误差。不是最小的!
**SAM**
1.关于求每一个节点的endpos数量:插入的时候标记这个节点是一个结束位置,最后我们从下往上递归加一遍,就是每一个的endpos数量。有好长一段时间我都以为子树大小=endpos数量。后来才突然想明白,克隆出的节点的初值是0,因为他不是一个结束位置,所以我们求出来的每一个节点的endpos数量不等于子树大小。
**高精度**
1.高精乘低精是先乘再进位!先进位再乘还得有点别的运算。(好久不写调了半天,还看了[我以前的博客](https://www.cnblogs.com/mrclr/p/8525701.html))
**杂项**
1.`assert()`是一个debug用的好东西,当括号里的条件不成立时,会立即停止运行,并给出提示(在高级的oj上会告诉你),包含在``库里。
2.离散化数组一定要算好空间:比如把一堆区间离散化,就要开二倍。因为每一个区间的左右端点都要算进去。
3.看到异或,第一反应是每一位单独考虑!
4.`clock()`是clock_t数据类型,返回的是long int。所以要是想保证程序运行时间小于0.9秒的话,必须强制转换成double,即`if((double)clock() / CLOCKS_PER_SEC)
各种trick和细节错误汇总的更多相关文章
- 编程中易犯错误汇总:一个综合案例.md
# 11编程中易犯错误汇总:一个综合案例 在上一篇文章中,我们学习了如何区分好的代码与坏的代码,如何写好代码.所谓光说不练假把式,在这篇文章中,我们就做一件事——一起来写代码.首先,我会先列出问题,然 ...
- Entity Framework学习笔记——错误汇总
之前的小项目做完了,到了总结经验和更新学习笔记的时间了.开始正题之前先啰嗦一下,对之前的学习目标进行一个调整:“根据代码生成表”与“生成数据库脚本和变更脚本”合并为“Code First模式日常使用篇 ...
- 李洪强iOS开发之OC常见错误汇总
// // main.m // 16 - 常见错误汇总 // // Created by vic fan on 16/7/13. // Copyright © 2016年 李洪强. All r ...
- Python常见的错误汇总
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: [错误分析]第二个参数必须为类,否则会报TypeError,所以正确的应 ...
- PHP常见错误汇总
日常开发和调试的时候,经常会遇到一些错误,光怪陆离的不知所以,所以,特此将错误汇总一下,借鉴!!! 1. 原因分析: 一般可能是该文件出现了问题,检查一下代码和格式,是否出现开始的地方出现了空格,或 ...
- Quartus II 中 Verilog 常见警告/错误汇总
Verilog 常见错误汇总 1.Found clock-sensitive change during active clock edge at time <time> on regis ...
- android studio 错误汇总以及解决办法
android studio 错误汇总以及解决办法 参考 https://www.jianshu.com/p/7c7de6562231 问题1. Error:Execution failed for ...
- react 报红错误汇总
react 报红错误汇总 一.Uncaught TypeError: Cannot read property 'value' of undefined 未知类型错:无法读取未定义的属性“value ...
- ibatis错误汇总
1) 错误:The prefix "context" for element "context:property-placeholder" is not bou ...
随机推荐
- VirtualBox安装文档教程
1找到安装包双击打开 2 3 这里可以更改安装路径 4 5 6 7 等待安装 8
- [洛谷P2056][ZJOI2007]捉迷藏(2019-7-20考试)
题目大意:有一棵$n(n\leqslant10^6)$个点的树,上面所有点是黑点,有$m$次操作: $C\;u$:把点$u$颜色翻转 $G$:问树上最远的两个黑点的距离,若没有黑点输出$0$ 题解:有 ...
- bat 设置多个静态ip
@echo off REM 本地连接名称 set NetName="本地连接 2" REM 默认IP netsh interface ipv4 set address name=% ...
- 巧用CSS3之background渐变
常见斑马loading 上图是我们常见的loading进度条,以前都是用一张背景图片平铺的.其实如果抛去兼容性因素,我们可以用零图片纯样式来实现. 一,首先,我们先为容器定义一个纯蓝色背景: box{ ...
- Awesome Mac OS Command Line 中文翻译
awesome-macos-command-line 收集了很多有趣的 Mac 终端命令. 看了一遍后,发现帮助很大. 见识许多没有使用过的命令,加深了对 Mac 的认识. 所以翻译成了中文,共享给其 ...
- 什么是SAP Graph
今年九月份刚刚过去的SAP TechEd Las Vegas会议上,SAP CTO Juergen Mueller向外界宣布了SAP一些持续进行的技术创新和改进,其中之一就是SAP Graph,大家可 ...
- Lerp
Lerp,就是返回两个值之间的插值,一般有三个参数.第一个参数为初始值,第二个参数为最终值,插值为0~1d的一个浮点数值,为0时为初始值,1时为最终值,为0到1之间的数值时返回一个混合数值.若第三个参 ...
- linux 内网时间同步配置
在工作中,内网环境机器的时间会有所差异,在某些测试环境下需要一毫秒都不允许出现误差,但又不想同步外网时间,那我们可以选择一台机器作为时间服务器来供其他机器进行时间同步,例如每隔1分钟同步一次时间. 一 ...
- Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)
就好像演电影一样,播放实现准备好的图片,来实现动画效果. 逐帧动画需要用到AnimationDrawable类,该类主要用于创建一个逐帧动画,然后我们把这个动画设置为view的背景即可. androi ...
- LeetCode - 82、删除排序链表中的重复元素 II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1 ...