2024.1.18 题选

2024.1.18 题选

早上 fzw 讲计数。我在学校。

CF870F Paths

自己想出的 *2700,但是不会一些细节。

考虑两个点之间的距离有哪几种情况

我们令 i<j

  • i=1,一定有 dis(i,j)=0,因为不连通。

  • gcd(i,j)1,一定有 dis(i,j)=1,因为一步到。

  • 考虑 ij,设两个数的最小质因数为 pi,pj,显然 pipj

也就是说有如下几条边:ipijpjpipipjpjpipj。同时对于任意的正整数 k>1有, kpikpj。然后由于约束,我们认为 k>2 一定不优,所以 2pi2pj

上述边可以转化成如下几种情况的路径。

  1. pipjn,直接 ipipjjdis(i,j)=2

  2. pipj>nmax(pi,pj)n2,可以走 i2pi2pjjdis(i,j)=3

  3. max(pi,pj)>n2dis(i,j)=0

统计满足上述条件分别的二元组个数即可。

dis(i,j)=2 的情况最难,采用正难则反,这个需要分析出来。

剩下的大力推式子即可。会发现答案所依赖的信息通过一次线性筛都可以算出来,所以时间复杂度 O(n)

CF914F

我一开始以为 1kri 讲的是分块套后缀自动机。然后打算换题。然后 jzy 说这题一开始讲的是就 bitset。我就心安理得地把这题用 bitset 搞过去了。

一个经典 trick 是考虑一个字符串的匹配可以理解成字符出现位置构成的 bitset 形成的 and。当然你每一位都要向右移动若干位。

然后你维护一下这个bitset。至于区间,只需差分即可。时间复杂度理论上是 O(n2+n|y|w)

P5693 第六分块

dX 讲的恶心数据结构,里比较能写的。

考虑小白逛公园的做法。

对于区间 [l,r] ,要维护 整个区间内的最大子段和 ans,以 l 为起点的最大子段和 lans,以 r 为终点的最大子段和 rans,子段和 sum

我们设这个线段树节点是 u,两个儿子分别是 ls,rs

uans=max(lsans,rsans,lsrans+rslans)

ulans=max(lslans,lssum+rslans)

urans=max(rsrans,rssum+lsrans)

usum=lssum+rssum

我们发现,如果决策出现变化,会影响所有取决于这个点的决策。如果暴力重构,时间复杂度 O(n),无法通过。

考虑决策发生变化当且仅当变化量超过某个阈值。

  • 超过阈值,重构子树

  • 不超过阈值,相当于直接区间加。

然后我们发现在两个信息合并时,阈值是往平面坐标轴上扔成直线以后的交点。然后你把维护的四个信息全部变成直线即可。

EI 通过复杂的势能分析,得到时间复杂度是 O(mlog4n+nlog3n+qlogn)

这种算法称为 KTT。该题是末日三问、[SNOI2020]区间和的弱化版。

something

事实上,还有昨天两题的,但昨天身体不太舒服,没写笔记,所以先摆了。

感觉做的题好难啊。你让我再写一遍,我也至多有五成把握能在合理时间内写出来。但是感觉也只有这样积累思路才能让自己厚起来。尽管最后这样难度的题依然未必能做出来,但它看起来确实可以为做题的一切(比如暴力 etc.)提供新思路,提供新视野(?

那就继续下去吧。

posted @   wtcqwq  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示