2024年2月 杂题记录

[ARC122E] Increasing LCMs

正序构造的话,我们是不知道前面有什么的,于是我们倒序构造。当我们考虑最后一位时,前面的位都是知道的。设 v=lcm(x1,,xi1),则有 v<lcm(v,xi),即 gcd(v,xi)<xi,这等价于 lcmji{gcd(xi,xj)}<xi

i 减小时,lcm 单调不升,x 候选集合会不断变大,于是每次随便选一个符合条件的 x 即可。

CF1656H Equal LCM Subsets

直接找子集很难,转化成在全集上删除。

考虑 SA 中一个数 ax 是否一定要被删除,设其等于 pα。设 SB 中的数在 p 这个质因子的指数上是 β,若 α>max{βi},则 ax 一定要被删除。这等价于 gcdj=1|SB|{axgcd(ax,bi)}>1,这可以用开 2n 棵线段树维护。

开个队列,把要删除的点入队,之后遍历队列,暴力将每个数删除后对另一个集合线段树造成的影响给除去。时间复杂度 O(n2logn)

[AGC039D] Incenters

很厉害的几何题!!!

对于 ABC 来说,设内心为 I,它的每条角平分线延长出去分别交外接圆 OD,E,C 三点,则可以证明,点 IDEC 的垂心。

于是,我们将求内心转化为了求两点弧中点所围成的三角形的垂心。考虑如何求三角形的垂心 H,如果不会欧拉线,凭借着向量知识也能知道,OD+OE+OF=OH,因此 F=D+E+F

于是我们可以 O(n2) 枚举任意两个点计算贡献,注意弧中点可能在优弧也可能在劣弧,要注意数量的计算。把三角函数拆开可以做到 O(n)

P6240 好吃的题目

猫树分治入门题。可以看出是 mid 往两边做 01 背包,写 pre,suf 两个数组被卡空间了……

P9200 「GMOI R2-T3」粒子环游

直接枚举 n+1 号点的插入位置,设插入第 i 位。记 si=j=1iei,则答案要求最小化

i=1n+1|sisp|×ci

绝对值很难处理,如果把 si 丢到数轴上,那这个式子的几何意义就是:有 n+1 一个点,每个点有点权 ci,现在要寻找一个点为中心点,使得所有点到这个中心点的加权距离最小。进而,我们可以将点权转化为 ci 个重复的点,这样就很显然了,我们只要选择位于中心的点,即在数轴上从左到右第 ci2 个点。

思考如何计算答案,对于 sp 右边的点,我们维护 sum=scnt=c,那么右边的答案就是 sumsp×cnt。左边同理。

我们可以用动态开点线段树维护这个数轴,要支持单点修改、二分查找第 k 小的数,区间求和,比较简单。

n+1 插入的位置从 ii1 时,s 只有 si,si1 发生了变化,简单维护一下即可。时间复杂度 O(nlogn)

P7515 [省选联考 2021 A 卷] 矩阵游戏

容易发现,如果把 a 的第 n 行和第 m 列全部赋值成 0,那么 a 可以递推得出。可惜因为 ai,j 有大小限制,这可能是不合法的。考虑怎么改变使它合法,发现如果在同一行或者同一列同时进行 +x,x+,x 操作,那么对应的 b 不会变化。

于是,设 ri 为第 i 行的 xci 为第 i 列的 x,那么可以构造一个表示 ai,j 变化量的新矩阵 Ai,j

[r1+c1r1+c2r1+c3r2c1r2c2r2c3r3+c1r3+c2r3+c3]

但这样形式不统一,于是我们把偶数行的 r 和奇数列的 c 取相反数,那么矩阵就变成

[r1c1c2r1r1c3c1r2r2c2c3r2r3c1c2r3r3c3]

这样,矩阵的每一项都是 xy 的形式了,由于 0ai,j+Ai,j106,所以 ai,jxy106ai,j,这就转化成了差分约束的形式,可以用熟知的算法解决。

P8113 [Cnoi2021] 自我主义的平衡者

原来看错题了…………………………………………

猜想 a 从小到大排序取最大值,反过来取最小值。

下面钦定 ai+1>ai,邻项交换证明前者。

  • bi=mbi+1=0。则 s<ais=s+msi>ai+1。交换后

    • bi=m,则 s<ai<ai+1s=s+msi=s>ai+1>ai,所以 bi+1=0,没有更优秀。对后续也无影响。
    • bi=0,则 s>ai+1,与条件矛盾。
  • bi=mbi+1=m,交换后必然不会更优。

  • bi=0bi+1=m,则 s>ais=s+si>ai+1。交换后 bi=0,不可能更优s>s>ai+1>ais>s>ai,所以 bi+1=0,没有更优。

  • bi=0bi+1=0,不可能更优。

综上,当 a 从小到大排序时,取最大值。

后者同理。

P1527 [国家集训队] 矩阵乘法

来学习整体二分。

整体二分就是应用于一些询问可以二分,但是如果单独二分时间复杂度过大,于是整体一起二分来减少时间复杂度的问题。

将所有操作按时间排好序放在数组 q 里离线下来。设函数 solve(l,r,L,R) 表示现在到了操作 lr,答案的值域在 [L,R] 之间,把 mid=L+R2 左边的值加入。对于询问则查询值域在 [L,mid] 内的数是否大于等于 k,是就把询问放到左区间,否则令 kkcnt,并放到右区间。时间复杂度 O((n2+q)log3n)

CF1285F Classical?

orz jiangly

套路地变 lcm(ai,aj)=aiajgcd(ai,aj)。如果 gcd(ai,aj)=1 就好了,我们发现,如果把 ai 的所有约数都放进序列,那必然存在 xaiyaj,使得 lcm(x,y)=lcm(aj,aj)=1gcd(x,y)=1,并且原答案不会改变。

考虑将数从大到小加入,发现如果扫到 x 时,集合里存在 y 使得 gcd(x,y)=1,那么所有在 (x,y) 内的数对 x 都没有贡献。于是拿个栈维护,扫到 x 时如果栈里有与 x 互质的数就不断弹栈。那如何判断栈里是否有与 x 互质的数呢?即 cntx 表示 x 倍数的个数,那么互质的数的个数为

dxμ(d)cntd

时间复杂度 O(i=1Vσ(i))=O(VlnV)

CF1773D Dominoes

黑白染色,若多米诺骨牌能完全铺满则二分图存在完备匹配。

由于题目规定了一开始存在完备匹配,则黑白点数量相同。所以删除两个同色点必然无解,记有用的点数量为 cnt,则方案数为 2×(cnt/22)。当 cnt>2000 时已经大于 106,所以有用的点数其实 2000

有解的方案不多,转为计算有解的。枚举删除的第一个点,再重新跑一次二分图匹配。若匹配数小于 cnt/21,则该点是必经点,不存在有解方案。否则就是找二分图另一边非必经点的个数。

求解匹配必经点是经典问题:不妨设左部图较大。从左部每个非匹配点出发,遍历它的所有右部匹配点邻居对应的左匹配点,则所有被遍历到的左匹配点均为非必经点。因为从它们开始存在交错路径使得终点为非匹配点,将匹配边换成路径下一条边即可。

P6130 随机红包

一开始一直想用概率分布函数和密度函数算,发现算不出来。

其实可以直接算概率然后积分,反正就是要求出那个面积。

原问题等价于在 [0,1] 上随机撒点,求第 k 小的线段的期望长度。

先从 k=1 开始算。设最短的那一段长度为 x,则其它段的长度必须大于 x,这可以看作所有段的长度减去 x 后再在 1nx 上随机撒 n1 个点。因此

P(xLmin)=(1nx)n1

那么

E(Lmin)=01n(1nx)n1dx=1n01n(1nx)n1d(1nx)=1n2(1nx)n|01n=1n2

现在再来考虑 L2,这等价于把所有线段减去 Lmin 最短线段的期望长度再加上 Lmin,因此

E(L2)=1nE(Lmin)(n1)2+E(Lmin)=1n(1n+1n1)

同理

E(Lk)=1nj=0k11nj

随便预处理一下即可通过。

[AGC032F] One Third

需要上一题的前置知识。

有一个很牛逼的转化,以第一刀为 x 轴正半轴将圆三等分,将 [0,2π3)[2π3,4π3),[4π3,2π) 里的刀分别染成红色、绿色、蓝色,之后将它们的角度分别 mod2π3,就可以转化成下列问题:

[0,13] 上随机选 n1 个点,钦定 1 号点和右边界处的点异色,每个点三颜色随机,求异色点对的距离最小值。

考虑枚举答案是第 k 小的线段,那么要求前 k1 条线段同色,容斥得概率为 13k1[k<n]13k

因此

ans=13i=1n(13i1[i<n]13i)E(Li)=1nj=1n13j(nj+1)

随便求即可。

P6055 [RC-02] GCD

题意:求i=1nj=1np=1njq=1nj[gcd(i,j)=1][gcd(p,q)=1]

n2×109

有点厉害的题目。

推式子推不出来。于是观察一下原式。

于是惊人的发现 j 就是在枚举 gcd(p,q)

于是化为

i=1np=1nq=1n[gcd(i,p,q)=1]=d=1nμ(d)(nd)3

杜教筛即可。

posted @   xishanmeigao  阅读(17)  评论(0编辑  收藏  举报
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示