一些 tips
在本博客中,一般写题解的题都是我认为比较有价值的题,然而我还做过一些有一定价值,但并没有达到值得写一篇题解的程度,故将这些题目总结出的套路用一句话概括在这里:
当然如果看到我太久不更请在评论区里催我一下
- 计数题里碰到平方可以尝试把它们拆成 每对符合要求元素各自产生贡献(upd on 2021.9.13,CF1187F)
- 概率题一定要注意随机变量是否独立,只有它们独立它们的贡献才能直接相乘(upd on 2021.9.13,CF1187F)
- 看到序列上的线性变换(指操作可以写成线性变换的形式)可以尝试用线段树维护矩阵乘法维护,如果涉及常数那么矩阵上可以额外维护一个常数维存储这些常量(upd on 2021.9.14,P7453)
- 看到 \(c_i\leftarrow c_{i-1}+c_{i+1}-c_i\) 这种形式的东西,应知道这东西等价于对 \(c_i-c_{i-1}\) 的置换(upd on 2021.9.15,CF1110E)
- 看到要求 \(x-y=v\) 的数的对数,并且值域不算太大,可以想到差卷积(upd on 2021.9.15,P3760)
- 对于某些数论中的题目,关于质因子的状压可以转化为原数的约数,因为每个数的质因子组成的集合本身就可以表示一个状态(不过一般状压质因子复杂度也可以被证明是调和级数或者类似的东西?)(upd on 2021.9.18,NFLSOJ 12429)
- 有的最优化问题有时也可以转化为计数问题,通过模上一个或几个大质数并判断余数是否为 0 来求解(upd on 2021.9.18,NFLSOJ 12429)
unordered_map常数大约是数组的两倍,所以以后状压 dp 之类的题目能删减状态就删减状态(upd on 2021.9.19,NFLSOJ 10131)- 对于质数 \(p\),必然有 \(\forall n\ge p,n!\bmod p=0\),利用这个性质可以使得很多 \(n\) 很大(比方说 \(10^{18}\))的情况变成诈骗题(upd on 2021.9.19,NFLSOJ 10131)
- 分块打表有时是一个不错的技巧(upd on 2021.9.19,NFLSOJ 10131)
- 看到斜率优化的形式的式子要想起来是斜率优化啊!!!(upd on 2021.9.20,CF643C)
- 对于 \(\sum\limits_{i=1}^ma_i=n\) 的数列 \(a\),其中包含的不同数的个数只有 \(\mathcal O(\sqrt{n})\) 种(upd on 2021.9.21,CF1574F,利用这个性质可以不用分治 FFT/求逆)
- 线段树维护信息的本质是合并两个区间的信息,因此如果发现一些信息满足可合并性(如链上的一些信息,或者一些有关树的直径/虚树的信息),可以想到线段树(upd on 2021.9.21,CF1083C)
- 一个数 \(\bmod\) 完一个比它小的数后大小减半,这有时是一个非常重要的性质(upd on 2021.9.21,AGC003E)
- two pointers 是均摊数据结构(雾),不支持撤销(upd on 2021.9.21,NFLSOJ 12430)
- 矩阵乘法可以通过“先枚举 \(i,k\) 再枚举 \(j\),并且当 \(k\bmod 16=0\) 时再取模”的套路减少取模常数(upd on 2021.9.22,NFLSOJ 10127)
- 对于矩阵乘法的题目,能把矩阵改成向量就改成向量,减少常数(upd on 2021.9.23,NFLSOJ 10127)
- 删除操作非常棘手,不妨考虑线段树分治(upd on 2021.9.24,CF678F),也可以倒立(
- 看到保证最短路径的前提下,求 xxx 的最值/计数的问题可以考虑建出最短路径 DAG,这样最短路径可以转化为最短路径 DAG 上的路径(upd on 2021.9.25,LOJ 2769)
- 区间 DP 的转移一般可以考虑“最后一次进行的操作”,然后将序列分成两个部分并计算贡献(upd on 2021.9.26,P4766)
- 看到“每个点的度数 \(\ge k\) 的题目”可以考虑按将所有点及其度压入一个
set中并动态删点(upd on 2021.9.28,NFLSOJ 12448) - 在构造题中看到下取整可以往抽屉原理的方向思考(upd on 2021.9.28,CF1450C2)
- 碰到 LIS/LDS 的题目不要只拘泥地想“\(dp_i\) 表示 \(i\) 结尾的 LIS/LDS 的最长长度”,也可以交换定义域&值域,变成“长度为 \(i\) 的 LDS/LIS 的最大/小结尾元素”(upd on 2021.9.28,NFLSOJ 12449)
- 树剖求 LCA 常数非常小,\(\log n\) 跑起来和 \(\mathcal O(1)\) 差不多快,不过会被满二叉树卡(upd on 2021.9.29,NFLSOJ 12456)
- 碰到从开头删除/结尾插入,全局插入,并且合并复杂度很高,但插入复杂度不高的题目,可以考虑双栈模拟队列(upd on 2021.9.29,NFLSOJ 12458)
- 使用莫队二次离线可以将一些 \(n\sqrt{n}\log n\) 将为 \(n\sqrt{n}\)。(upd on 2021.10.1,NFLSOJ 10175)
- 看到 DAG 的计数可以想到枚举度为 0 的点然后容斥(upd on 2021.10.4,洛谷 P6295,更多 trick 可见那题题解)
- 有的概率题会让你保留成小数形式 instead of 取模,这时候你就可以考虑重复某个过程直到精度符合要求 instead of 推无穷级数(upd on 2021.10.4,CF623D)
- 对于计数题,如果发现等价表达不太好找,可以尝试容斥(upd on 2021.10.11,NFLSOJ 12473)
- 对于一些带修的数据结构题,可以考虑离线扫描线并以时间为下标(upd on 2021.10.15,NFLSOJ 12461)
- 对于区间查询所有还活着的位置并将这些活着的位置全部删去的模型,可以考虑使用并查集维护,这样可以做到 \(\Theta O(n\alpha(n))\)(upd on 2021.11.2,NFLSOJ 12554)
一些 tips的更多相关文章
- Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)
忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...
- 【Tips】史上最全H1B问题合辑——保持H1B身份终级篇
[Tips]史上最全H1B问题合辑——保持H1B身份终级篇 2015-04-10留学小助手留学小助手 留学小助手 微信号 liuxue_xiaozhushou 功能介绍 提供最真实全面的留学干货,帮您 ...
- layer.js中layer.tips
<script src="~/Content/js/layer/layer.js"></script> layer.tips('名称不能为空', '#pro ...
- HTML 最简单的tips 怎么支持指定DIV显示提示信息
<body> <style type="text/css"> a.link{position:relative;} a.link div.tips{ bor ...
- CSS:CSS使用Tips
Css是前端开发中效果展现的主要部分之一,良好的Css书写习惯可以为实际的项目开发提高效率,也可以为实现良好的团队合作提供保证. 一般新手在使用Css的时候经常会犯一些错误,出现一些不经意的漏洞,如果 ...
- 【读书笔记】100个Switf必备tips
声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 1.Selector 在Swi ...
- 【转】40个良好用户界面Tips
一个良好的用户界面应具有高转换率,并且易于使用.但要用户体验良好并不容易做到,下面我们整理了40个良好用户界面Tips,希望能对你有帮助! 1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的 ...
- 转:Eclipse Search Tips
from: https://github.com/ajermakovics/eclipse-instasearch/wiki/Eclipse-search-tips Eclipse Search T ...
- VS:101 Visual Studio 2010 Tips
101 Visual Studio 2010 Tips Tip #1 How to not accidentally copy a blank line TO – Text Editor ...
- [css 揭秘]-css coding tips
css 揭秘之css coding tips demo(1) html 代码: <body> <section> <div class="demo1" ...
随机推荐
- Java(3)基本数据类型及其类型转换
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201501.html 博客主页:https://www.cnblogs.com/testero ...
- TypeScript中将函数中的局部变量“导出”的方法
首先是在模块a.js中声明一个可导出(export)的数据结构,例如: export class ModelInfo{ id: string; name:string; } 其次是在模块b中声明可导出 ...
- 力扣 - 剑指 Offer 53 - II. 0~n-1中缺失的数字
题目 剑指 Offer 53 - II. 0-n-1中缺失的数字 思路1 排序数组找数字使用二分法 通过题目,我们可以得到一个规律: 如果数组的索引值和该位置的值相等,说明还未缺失数字 一旦不相等了, ...
- 微服务(三) Eureka注册中心和Ribbon负载均衡
1. Eureka注册中心 1.1 Eureka的结构和作用 在上一篇文章中 微服务(二)服务拆分及远程调用 order-service在发起远程调用的时候,该如何得知user-service实例的i ...
- 认识spring security
在一个系统中认证和授权是常有的事情,现在比较流行的框架有spring security.shiro等等.他们都能很好的帮助我们完成认证和授权的功能.那么假如说让我们自己完成一个登录那么应该大致的流程是 ...
- 攻防世界 杂项 1.base64÷4
666C61677B45333342374644384133423834314341393639394544444241323442363041417D 根据题目base64÷4得base16 在线工 ...
- 单源最短路径算法:迪杰斯特拉 (Dijkstra) 算法(一)
一.算法介绍 迪杰斯特拉算法(英语:Dijkstra's algorithm)由荷兰计算机科学家艾兹赫尔·迪杰斯特拉在1956年提出.迪杰斯特拉算法使用了广度优先搜索解决赋权有向图的单源最短路径问题. ...
- scrapy 的response 的相关属性
Scrapy中response介绍.属性以及内容提取 解析response parse()方法的参数 response 是start_urls里面的链接爬取后的结果.所以在parse()方法中,我 ...
- 关于dns服务工作的原理,和配置的细节理解。
dns服务器相关 1,dns原理,也就是迭代,和递归查询.将域名解析为ip的过程. 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Loc ...
- 使用Netty和动态代理实现一个简单的RPC
RPC(remote procedure call)远程过程调用 RPC是为了在分布式应用中,两台主机的Java进程进行通信,当A主机调用B主机的方法时,过程简洁,就像是调用自己进程里的方法一样.RP ...