首页 > 其他分享 >最近见到的 trick 汇总

最近见到的 trick 汇总

时间:2024-01-20 22:38:15浏览次数:29  
标签:求解 text sum 汇总 trick 见到 维护 考虑 dp

见到啥写啥吧 qwq

历年省选/NOI/NOIP/其他官方考试已经标出。

OEIS

把样例粘贴到 OEIS 上。

www.oeis.org 怎么你了。

CF1916H1/H2

数学

容斥原理求解问题。

\[|S_1\cup S_2\cup\cdots\cup S_n|=\sum_{i=1}^n|S_i|+\sum_{k=2}^n(-1)^{k-1}\sum_{1\leq i_1<i_2<\cdots<i_k\leq n}|S_{i_1}\cap S_{i_2}\cap \cdots\cap S_{i_k}| \]

主动去求解不满足要求的方案,再套用容斥原理,往往会有新的发现。而在这一过程中,常用 dp 或者其他方案进行求解:P3813。特别的,\(k\) 较小时,甚至可以直接模拟上述过程,但更多的是对每个 \(k\) 进行求解。

其他容斥 dp:CTT2017-P4229,T405472,LOJ6400

没认真学的支配树:联合省选 2021-P7520。

树上两个不相交路径,一个拆在点 \(u\) 子树内,另一个拆在子树外,两个子问题分开处理后拼一起:P6072。

换根的效果可以通过拼凑 DFS 序区间得到:P6071。

关于虚树的经典结论,设关键点为 \(a_{1\sim k}\),按照 dfs 序已经排序。那么,虚树的边数可以写成:

\[|E_k|=\sum_{i=1}^k \text{dep}({a_i})-\sum_{i=1}^{k-1}\text{dep}({\text{lca}(a_i,a_{i+1})})-\text{dep}({\text{lca}(a_{1\sim k})}) \]

这个性质就运用在了 ZJOI2019-P5327 的某一部分。

路径拆成树上差分的形式维护,然后用线段树合并,得到该节点的全部信息:ZJOI2019-P5327。树上 DP 用前缀和后缀和优化后,类似用线段树合并优化的还有 [PKUWC2018] MinimaxCF1455G 以及 [ZJOI2019] 语言[NOI2020] 命运

图论

图上,对于较多点对,求某种具有特殊性质的路径:提取出来关键的边组成特定形态的图,然后进行特殊处理:CF864F,P5292。

需要对最小生成树的信息做处理,可以考虑构造 kruskal 重构树:NOI2018-P4768。

网格图进行骨牌移位的,牵扯大量的二元组互相依赖关系,考虑转化为图论问题。边 \((u,v)\) 表示 \(u\) 的空位可以移动到 \(v\),于是进一步可以建立出基环树或者树或者图,转化为可达性或者别的东西:CF1753D(转化为最短路),CF1368G(转化为二维数点)。

dp

数据范围不平衡,拆位进行数位 dp:CF1290F。

dp 转移维度差别不大,仅仅与上一维度的上一层有关的,考虑对每一层进行分层 dp:ZJOI2010-P2605。

具有一定的单调性时,主动去想分治可能会对问题有所简化:ARC150F。

连续段 dp:CF1919E,CF1591F。

数据结构

离线,对右端点扫描线,维护区间历史和:CF997E,P9990,NOIP2022-P8868(这题主要难点是怎么维护)。

与区间合并强相关又具有结合律的东西,显然考虑矩阵乘法,动态 dp 也是类似的:CF1919F1/F2。

数据结构维护更高次项的信息:BJOI2018-P4458,CTT2012-P4247,P4062。

询问的东西具有特殊性质时,显然可以考虑忽略中间对这个性质没有贡献的部分,只考虑其中的一部分即可维护答案:IOI2021-P8518。

具体的知道一个操作序列时问题才能求解,考虑颠倒序列维度以及时间维度,对序列从左到右扫描线,数据结构维护每个时刻的信息:IOI2021-P8518,JOISC2021-P7560。

区间赋值,与数颜色相关的,考虑运用对其势能分析的性质,直接维护所有的连续段:P8512。

维护一个区间的变换:T372191,T390120。

注意某个值变化的次数以及某个性质,可以控制在 \(O(\log n)\) 级别的:SNOI2017-P5025,CF1793F。

常用的想法是,将每种颜色的贡献给它拆掉,最后拼合到一起取最优值:P8543。

字符串

01-trie 整体 \(+1\) 的技巧:P6018,联合省选 2020-P6623。

[NOI2016] 优秀的拆分 的类似套路,枚举 \(j-i-1=len\),以及 \(len\) 的所有倍数 \(k\)。把所有的 \(k\) 记为关键点,这样每两个字符串都要经过关键点。枚举每两个相邻的关键点 \(x,y\),SA 套路算出 \(x,y\) 前缀的 LCS 为 \(k_1\) 以及 \(x,y\) 后缀的 LCP 为 \(k_2\)。若 \(\text{LCP}>len\),实际上就是要求相交或者相邻。滑动这个窗口,发现溢出长度的可取值一直在 \(-1\),故为等差数列求和。直接 \(O(n\log^2 n)\) 计算(调和级数以及计算 LCP,LCS)此 trick:NOI2016-UOJ219,P5161。

tricks

和出现次数有关的,考虑进行哈希:CF1418G。

钥匙开锁:考虑对钥匙对锁进行匹配,转化成别的问题:AHOI2022-P8339(转二维数点)。

不好看的柿子乱化,转化为分数规划问题,从而进行 dp 求解:BJOI2019-P5319。

点权转一次函数,维护上下凸包:P4756。

没啥脑子的分治:P4755。

不断单调往前跳拿倍增优化:PKUSC2018-P5465。

极差转为确定最大值,移动最小值,用双指针维护更新答案:NOI2016-P1712。qoj。

字典序最小化的问题,常常要从小到大插入,判断插入后能否构成一个新的合法字典序列:P7562。

存在凸性的东西,可以考虑根号分治:USACO2023.2-P9132。

优化技巧

曼哈顿距离 \(|x_1-x_2|+|y_1-y_2|\) 转为切比雪夫距离 \(\max(|x_1-x_2|,|y_1-y_2|)\),点 \((x,y)\) 转为切比雪夫距离下的 \((x+y,x-y)\):JOISC2021-P7561。

双序列,每一对都要配对,将两个序列拼到一起:P8321。

整体二分然后进行分治。二维矩形对长边分治的题:ZJOI2016-P3350。

并查集优化跳跃,优化区间合并:loj6913 的某部分,CF1827C。

对具有同种性质的集合维护并查集,进行 \(O(n\log n)\) 启发式合并:WC2021-P7323。

边点权大小,或者类似的,在一个特定区间可以一起处理的:CF1633E,联合省选 2022-P8290(此题是拉格朗日插值优化 dp)。

标签:求解,text,sum,汇总,trick,见到,维护,考虑,dp
From: https://www.cnblogs.com/nullptr-qwq/p/17977234

相关文章

  • Essay - OI tricks
    ......
  • trick 集合
    trick集合1.基础判断是否\(\foralli\)有\(x<a_i\):转化为是否\(x<\min(a_i)\)。大于类似。P9868&题解,ABC223F&题解括号序列:是括号序列的条件:总共的左括号和右括号数量相等;任意前缀的左括号数量\(\ge\)右括号数量。若将序列中左括号看作......
  • JavaScript保留字和预定义的全局变量及函数汇总
    保留字也称关键字,每种语言中都有该语言本身规定的一些关键字,这些关键字都是该语言的语法实现基础,JavaScript中规定了一些标识符作为现行版本的关键字或者将来版本中可能会用到的关键字,所以当我们定义标识符时就不能使用这些关键字了,下面介绍下JavaScript保留字和预定义的全局变量......
  • 搜索习题汇总
    搜索习题汇总1.[USACO1.4][IOI1994]时钟TheClocks题目描述考虑将如此安排在一个\(3\times3\)行列中的九个时钟:|-------||-------||-------|||||||||---o||---o||o||||||||-------......
  • 白嫖全网资源!免费资源汇总!太牛了!请偷偷收藏,你懂得!
    早几年,我们想在手机上搜索点内容简直是噩梦。使用夸克的原因:夸克网盘不容易河蟹,不像度娘疯起来根本分享不了。一些热门资源基本只有夸克能分享。在线观看电影、电视剧和综艺和动漫节目的app,提供了丰富的影视资源和便捷的观看体验,早阅读早享受!夸克是阿里旗下的一款智能搜索App。......
  • 原神汇总
    『你若困与无风之地,我便让全世界的风吹向你』\(\hspace{2cm}\)——温迪『故友的灵魂,就交给我吧』\(\hspace{2cm}\)——温迪『无念,无想』\(\hspace{2cm}\)——魔神任务第二章·第二幕「无念无想,泡影断灭」『当你重新踏上旅途之后,一定要记得旅途本身的意义』\(\hspace{2cm}......
  • 天气api接口+地区区号以及县市省数据汇总
    地区区号以及县市省数据天气接口:http://t.weather.sojson.com/api/weather/city/+区号eq:http://t.weather.sojson.com/api/weather/city/1013401011.链接下载:https://files.cnblogs.com/files/blogs/708875/sys_area.zip?t=1705546362&download=true2.单独提取代码--需......
  • 【树上DP前导知识汇总】
    一、树的直径记录最长、次长,输出\(max(最长+次长)\)\(AcWing\)\(1072\)树的最长路径#include<bits/stdc++.h>usingnamespacestd;constintN=10010,M=N<<1;intn;//n个结点//链式前向星inth[N],e[M],w[M],ne[M],idx;voidadd(inta,intb,intc......
  • 知识汇总:查看linux服务器系统命令
    要查看Linux服务器的系统信息,你可以使用多种命令来获取不同类型的信息。以下是一些常用的命令和它们的用途:uname -显示基本的系统信息uname-a:显示所有的系统信息,包括内核名称、主机名、内核发行版本、内核版本、机器类型、处理器类型、硬件平台和操作系统。hostnamectl......
  • Mybatis面试题汇总(36)
    对MyBatis的认识[4]简单介绍下MyBatisMyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJava......