11.15杂题选做
P3298 [SDOI2013]泉
本来是一个可以一遍切的题。然而数组开小就。。。。
发现 N 不是特别大,并且泉水只有 6 种,于是我们可以暴力枚举每一种选择情况,然后统计相同的个数计入答案。
发现会算重复,重复的部分直接二项式反演解决掉。200紫题祭 (code)
P4211 [LNOI2014]LCA
树链剖分+线段树或者树状数组。。
对于每一个询问而言,一个结点的贡献其实就是子树内在 [l,r] 这个区间中的节点数,这个东西直接树链剖分。
发现对于每个询问都搞一次的话复杂度不如暴力,再观察一下,我们维护的其实是一个类似于前缀性质的东西。
于是直接将一个区间拆分成两个区间贡献相减的形式。。不得不说树链剖分和树状数组常数实在是小(code)
CF297E Mystic Carvings
题目藐视不太清楚,大概就是从若干个边中选择三条,在这三条边的两个端点分别建立熊洞,定义两点之间的距离为经过顺着圆或者无向边经过的熊洞数量减一,假设选出的三条边是 (a,b),(c,f),(e,f) 我们要使得 dis(a,b)=dis(c,f)=dis(e,f) ,求方案数。
发现三条弦的状态只有五种:
并且满足条件的只有第二个第五个,但是不是特别好算,我们可以算 1,3,4 的,然后用总方案数 (n3) 减去就好了。
设 li,ri 分别表示左右两侧的与第 i 条弦不相交的弦的数量。
情况 1 的方案就是 n∑i=1li×ri 。
情况 3,4 我们把它们放在一起计算。发现这两张图的共同点是:
三条弦中有两条满足另外的两条弦一条与其相交,一条与其相离。
同时需要注意每一组有两条弦满足情况因此方案数就是:
剩下问题就是对于 l,r 数组的计算了, (x′,y′) 在 (x,y) 左边并且不相交只会满足下面三个条件之一:
-
x′<x并且y′<x
-
x′<x并且y′>y
-
x′>y并且y′>y
对于 (x′,y′) 在 (x,y) 右边并且不相交的情况就是 x′>x并且y′<y 。
直接二维偏序解决即可 (code)
AT2389 [AGC016E] Poor Turkeys
一道NOIP模拟23这种远古时代的题目了。
fi,j 表示如果让 i 存活 j 必须从活着的状态到死去的状态。
我们逆推,对于当前扫到的火鸡 i 以及一对不可能同时存活的火鸡 (x,y) 如果此前 i 的存活已经需要两者来死亡了,因为我们是逆推,先执行这个操作,那么 i 一定不会活着的。。
同样的对于 x,y 对于 i 是否需要死亡的状态也就可以转移了。
那么最后答案就是两只鸡的 f 没有交集。 bitset
实现 (code)
AT2673 [AGC018D] Tree and Hamilton Path
哈密顿路不是特别好求,我们尝试着求一下最长哈密顿回路再减去一个最短的路径。
假设一条边所连接的两个联通块大小较小值是 siz 那么大小较小的这一棵子树中的点都会经过这条边,毕竟我们要求最长的哈密顿回路,盗个图:
然后就是如何去除那一条多余的路径了,然而随便选择一条路径是不对的,因为他不一定在我们的最优的哈密顿回路中。
最优解的路径一定经过重心。
因为重心保证了它的所有子树的大小都小于或者等于 n2 。
我们可以做到每一条路径,都是在重心的两个不同子树中各取一点相连,再盗一个图:
对于只有一个重心的情况就直接选择与重心相连的最短的边删掉,对于有两个重心的情况直接删去他们之间的边就好了。 (code)
AT2705 [AGC019F] Yes or No
假设 N≥M 显然我们至少会猜对 N 个答案。
把问题抽象到一个二维平面上面,横纵坐标分别为还有多少个 Yes 或者 No 没有出现。
那么每一种答案序列都可以看作是一个以 (N,M) 为起点只可以向下或者向左走的序列,总方案就是 (N+MN)
我们的问题件就变成了对于经过 y=x 这条线的答案序列我们蒙对答案的概率。
显然答案是 Yes 或者 No 是等价的,那么对于一个点 (i,i) 而言,经过它的方案数就是 (2×ii)×(n+m−2×in−i) 。
最后再除以一个总方案数就好了 (code)
AT3857 [AGC020C] Median Sum
只能说代码实现难度为 0 。
bitset
实现一个背包,假设物品总和是 cnt 对于任意的一个可以构成的 x , cnt−x 也一定是存在的,直接从 cnt2 扫就好了。(code)
AT2363 [AGC012C] Tautonym Puzzle
构造题。
我们可以把序列分成两部分,先在后面插入 1∼cnt 的升序排列,然后尝试在前面构建一个 1∼n 的排列。
那么题目所要求的东西就变成了前半个序列的上升子序列的个数。
考虑从小到大填数,在前面填一个数的贡献是 +1 在后面加一个数的贡献是 ×2 直接递归处理即可 (code)
CF383C Propagating tree
树链剖分大板,直接对于深度的奇数或者偶数开两个树状数组维护,分别给不同的符号就好了。 (code)
P4514 上帝造题的七分钟
二维树状数组维护区间加,区间求和。。
也是维护一个差分数组,操作类似于一维上的情况,需要维护常数项 , x 项, y 项,以及 xy 项。(code)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 突破Excel百万数据导出瓶颈:全链路优化实战指南
· 如何把ASP.NET Core WebApi打造成Mcp Server
· Linux系列:如何用perf跟踪.NET程序的mmap泄露
· 日常问题排查-空闲一段时间再请求就超时
· Java虚拟机代码是如何一步一步变复杂且难以理解的?
· 在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,轻松隐藏敏感数字!
· 突破Excel百万数据导出瓶颈:全链路优化实战指南
· ChatGPT为何放弃WebSocket?揭秘EventSource的三大决胜优势
· 【SQL周周练】给你无酸纸、变色油墨,你能伪造多少美金?
· 使用C#构建一个同时问多个LLM并总结的小工具