ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7.18-7.24 总结

2022-07-25 20:31:23  阅读:108  来源: 互联网

标签:总结 10 rs 7.24 7.18 然后 枚举 ls dp


昨晚上耍手机耍到凌晨三点,真的离谱,感觉自从上周放了假以来越来越颓了。
有时候还不如上一天文化课,饭后课前搞OI来得好。
每天玩4k人菜瘾大,Malody 3dan 都过不去,真的乐
学习效率真的很低,因为颓的机会太多了。一周时间,暑假作业只做完了数学和一半物理。
得改变一下了。

扯了一堆无关的东西,现在要总结这一周做的好题。以后要坚持3天一更,延续省选前的传统。

但是也不能和那段时间写的一模一样。不能想到哪儿写到哪儿,也不能是几天的日记合并在一起。

主要目的还是得收集一些好题,以及总结一些教训。

CF1408H Rainbow Triples

标签:模拟费用流,线段树

感觉模拟费用流就是先把图建出来,使问题更直观,再一波乱贪心,用一些DS来维护。

这道题就是极好的例子。啊这个题应该叫模拟最大流?

我们依靠对问题的分析建出来了个图,然后最大流=最小割,就发现图的特殊性质带来的优势,把问题转化成了一个二维偏序状物。

具体的有点长,懒得写了。

AUOJ1622 小Y的序列

标签:伯努利数,二项式反演

啊就是这么个式子:\(\sum_{j=0}^n j^k=k![x^k](e^{x(n+1)}-1)/(e^x-1)\)

怎么来的呢,\(j^k=k![x^k]e^{xj}\) 对吧,然后等比数列求和

这个就可以拿来求 \(\sum_{j=0}^n j^k\) ,当 \(k\) 变 \(n\) 不变的时候。

然后我们这个题用容斥的技巧推一下就好了。懒得写了。大概就是一个:

“恰好”和“钦定”间的处理。

gym102155E

标签:FFT

一句话题意就是求 \(\left\lfloor\dfrac{n}{99}\right\rfloor+\left\lfloor\dfrac{n}{999}\right\rfloor+\left\lfloor\dfrac{n}{9999}\right\rfloor+……\)

\(n\) 是 \(10^{10^5}\) 级别。

这个等于 \(n(10^{-2}+10^{-4}+10^{-6}……)+n(10^{-3}+10^{-6}+10^{-9}……)+……\)

然后我们统计每个 \(10^{-i}\) 出现的次数。

把 \(n\) 和这个卷起来就好了。感觉一开始“这个等于”很关键。

注意小数部分特殊处理。

CF1707D Partial Virtual Trees

标签:前缀和

感觉要是这场打了能涨大了,因为 C 和 D 都是很快想出来的。
但是没用。等下次真打 div1 还是要萎。

那个 \(S1!=S2\) 的限制很反,直接容斥解决。

然后记 \(dp_{i,j}\) 表示 \(i\) 子树内活得最久的点在第 \(j\) 棵虚树还存在。

然后转移分两种:

第一种,我们点 \(i\) 活得最久。那剩下的点就直接求个前缀和,再乘起来,很简单的。

第二种:我们点 \(i\) 活得不是最久。我们考虑枚举最久的所在的子树 \(v\)

假装枚举最久时间 \(t\) 和第二久的时间 \(t2\) 这个方案就是 \((t-t2)dp_{v,t}(\prod dp(v2,t2)-\prod dp(v2,t2-1)(v2!=v))\)

发现可以整理一个 \(a_ib_j(i-j)\) 的形式,枚举 \(i\) ,还是能前缀和一下算。

需要注意的是当算 \(dp_1\) 的时候不能算进去第二种情况

铭记前缀和优化

CF1648E Air Reform

标签:kruskal 重构树,启发式合并

啊既然路径权值是所有边的 \(\max\) ,让它最小,我们不难想到用 \(kruskal\) 重构树处理。

把原图的树建出来,这个补图上 \(u\) 和 \(v\) 的边权就变成了两点的 \(lca\) 的权值。

题就是想让你把补图的最小生成树求出来。

我们还是依据 \(kruskal\) 算最小生成树的思路,贪心的尽量取更小的。

于是直接 \(dfs\) 一遍整个树,然后对于一个点 \(x\),先让 \(ls\) 内 和 \(rs\) 内处理完,再考虑合并。

如果 \(sz_{ls}>sz_{rs}\) 就交换 \(ls\) 和 \(rs\)

然后枚举 \(ls\) 端每一个联通块 \(G1\) ,再枚举内部每一个点 \(x\),再枚举 \(rs\) 端每一个联通块 \(G2\) ,再枚举内部每一个点 \(y\) ,如果 \(x\) 和 \(y\) 间在原图没边

就直接 merge \(G1\) 和 \(G2\) ,把 \(G2\) 从 \(rs\) 端删去

然后每个 \(G1\) 处理完丢掉 \(rs\) 端去。因为会有两个 \(ls\) 端的联通块,通过一个 \(rs\) 端合并在一起了。要认真处理这种情况。

为啥复杂度是对的。

首先成功匹配的次数是 \(O(n)\) 的。然后不成功匹配的次数怎么算。

一个 \(x\) 会被算多少次。有两种,一种就是直接被枚举到,一种是被丢进 \(rs\) 端后往上,成为了另一个 \(ls\) 。

那这个过程就是 \(O(\log n)\) 的,因为我们进行了 "\(sz_{ls}>sz_{rs}\) 就 \(swap(ls,rs)\)" 的操作。

所以这一部分一共是 \(O(m\log n+n)\) 的。很神奇。启发式合并,很神奇。

P6758 [BalticOI2013] Vim

标签:“线头”dp

挖槽这个太牛逼了。就是把一个序列上反复横跳的路径,我们想象它是一根线,然后在每个点切一刀分成若干段,然后我们考虑顺序的考虑这残破的每一段

在想办法连上线的同时,也统计了答案。我们还可以在每个线上记一些信息。

说到这个题,首先有一个贪心,能看出来每一段是有一根线或三根线的。就是跳,取E,跳,取E,的过程。

于是记 \(f_{i,j}\) 是考虑到了第 \(i\) 段,然后第一根线想跳到后面第一个为 \(j\) 的,然后当前总代价最小值。

\(g_{i,j,k}\) 同理是第一根线跳到 \(j\) ,第三根线跳到 \(k\) 。转移不难,分 10 类讨论。

TOPCODER 14069 BearDestroys

标签:状压dp

(\(n\le 13,m\le 30\) )

挖槽这个也很nb。首先他要求的操作顺序是先按 \(i\),再按 \(j\)。我们直接状压就是 \(O(nm2^m)\) 的。G。

我们换一个想法。考虑它一个格子 \((i,j)\) ,它的决策只会影响 \((i,j+1)\) ,\((i+1,j)\) ,\((i+1,j-1)\) ,\((i-1,j+1)\) 的决策。

于是我们以先按 \(i+j\) ,再按 \(i\) 的顺序操作。很神奇吧!

再在这个基础上 dp ,复杂度就变成了 \(O(nm2^n)\) 。

gym102586A Cookies

先把它的题意转化成这样一个过程:

每次添加一个数 \(x\) ,然后从 \(1\) 到 \(n\) 顺次考虑

  1. \(o_i=1\) ,则 \(b_i>x\) 的情况下要 \(swap(b_i,x)\)

  2. \(o_i=2\) ,则 \(b_i<x\) 的情况下要 \(swap(b_i,x)\)

最后 \(ans=ans+x\)

那发现连续一段 \(o\) 相等的情况下可以合并,用一个堆维护。\(o_i=1\) 则弹最大的,\(o_i=2\) 则弹最小的。

然后再考虑,设前面一坨 \(o_i=1\) 堆顶为 \(a\) ,后面一坨堆顶为 \(b\)

如果 \(a<b\) ,因为此时没法连续刷两个堆,所以无论 \(x\) 取何值,这俩堆的顺序都不重要了。

于是可以交换它俩,再和两边的堆合并。反之同理。

如果 \(a>=b\) ,考虑两个堆在 \([b,a]\) 间的数的个数。

发现每次起码要减1。于是直接跑,复杂度是对的。

标签:总结,10,rs,7.24,7.18,然后,枚举,ls,dp
来源: https://www.cnblogs.com/Sakurajima-Mai/p/16518721.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有