record 6.10-6.14

* [abc357 G]

观察到 \(m\le 50\),说明绝大多数行它们都是完全没有阻挡的。考虑使用 dp 的方法计算,对于有阻挡的部分我们暴力计算,这部分复杂度是 \(O(nm)\) 的。

对于没有阻挡的部分,我们考虑进行一个快速计算。考虑第 \(x\to y\) 行都是空的,第 \(x-1\) 行的情况是 \(\{a_n\}\),我们先考虑那些在第 \(x-1\) 行就已经有了的数。

观察到,一个序列 \(a\) 经过 \(k\) 次前缀和变化得到 \(b\) 之后,\(b_i=\sum_{j}val_{k,i-j}a_j\),这显然是卷积的形式,我们可以快速计算。

注意到有些位置是事后出现的,我们要考虑这部分怎么计算。

额我最初的想法是,给它配一些合适的初始值,然后它就可以自己计算了。后来发现这初始值配起来有一点困难,可能也能配,找规律不清楚能不能找出来。

然后阅读了 sol,这个感觉有点牛的。

它先容斥一手,这个是常规手段。然后观察一下,发现特殊的 \(m\) 个可以单独贡献,对于新加入的 \(n\) 个,贡献可以拆成 fft 的形式,就可以做了。

这个题的问题出在,我们最开始没有去做容斥,我想着是先研究清楚没有这个限制的情况再继续做,殊不知没有这个限制的情况也是一个容斥的东西。有的时候没有思路了可以不必死磕。当然也可能是我的这个做法也行只不过我没做出来。

* [YDRS#008 E]

场上一看是数论题就没动力了。

要求 \(\sum_{x=1}^n\sum_{y=1}^n\sum_{z=1}^n[x^y=y^z]\),考虑对 \(x,y,z\) 进行质因数分解之后变成 \(\prod_i p_i^{\alpha_i/\beta_i/\gamma_i}\)

对单个质因子 \(p\) 考虑,这相当于要求 \((p^{\alpha_i})^y=(p^{\beta_i})^z\),即 \(\alpha_iy=\beta_iz=val_i\)

然后经过一些简单的分析,你发现记 \(d=\gcd(val_i)\),那么这所有的条件都等价于计数满足如下条件的 \((z,val_i)\) 对。

\[\prod p_i^{\frac{val_i}z}\mid d \]

\(d=\prod p_i^{a_i},val_i=e_id\),显然需要 \(\lceil\dfrac{val_{mx}}{a_i}\rceil\le z,z\mid val_{mx}\)

阅读了 sol,感觉自己啥都不会了。

\[n+\sum_{p=2}^n\sum_{a=1}^{\log_pn}\sum_{b=1}^{\log_pn}[\gcd(a,b)=1]\sum_{z=1}^n[(p^a)^{p^b}=p^{bz}]\\ n+\sum_{p=2}^n\sum_{a=1}^{\log_pn}\sum_{b=1}^{\log_pn}[\gcd(a,b)=1]\sum_{z=1}^n[ap^b=bz]\\ n+\sum_{p=2}^n\sum_{a=1}^{\log_pn}\sum_{b=1}^{\log_pn}[\gcd(a,b)=1][b\mid ap^b][\frac{ap^b}{b}\le n]\\ n+\sum_{p=2}^n\sum_{a=1}^{\log_pn}\sum_{b=1}^{\log_pn}[\gcd(a,b)=1][b\mid p^b][\frac{ap^b}{b}\le n]\\ n+\sum_{a=1}^{\log_2n}\sum_{b=1}^{\log_2n}[\gcd(a,b)=1]\sum_{p=2}^n[p^a\le n][b\mid p^b][\frac{ap^b}{b}\le n]\\ n+\sum_{a=1}^{\log_2n}\sum_{b=1}^{\log_2n}[\gcd(a,b)=1]\sum_{p=2}^n[b\mid p^b][p^b\le\frac{nb}{a},p^a\le n] \]

显然 \(p\) 是一个前缀,并且当 \(b\ge 3\) 的时候有用的 \(p\) 就不多了,你可以对每个 \(b\) 去处理一下有用的 \(p\) 的前缀和。

\(b=1\) 时,变成 \(\sum_a\sum_p[p\le\frac na,p^a\le n]\),随便做做。

\(b=2\) 时,变成 \(\sum_a\sum_p[2\mid p^2][p^2\le\frac{2n}a,p^a\le n]=\sum_a\sum_p[2\mid p][p^2\le\frac{2n}a,p^a\le n]\) 照样随便做做就行了。

[CF1979 E]

似乎并不是很难。

我们转切比雪夫,然后考虑枚举最靠左的那个点,进行一些讨论之后发现几种情况都是比较简单的。

然后 sol 里头说了发现原坐标系一定存在两个点满足 \(|x_i-x_j|=|y_i-y_j|\) 然后做一些什么东西,这个本质上仍然可以从切比雪夫里头推出来。

* [CF1979 F]

甭管有没有用,你先想想怎么保证一个完全图删了 \(n-2\) 个边之后仍然存在哈密顿路径。

首先显然删 \(n-1\) 个边可以删同一个点的,这样就爆了。所以这个界是紧的。

考虑证明合法性,使用数学归纳法。为了进行归纳,我们需要一个点,这个点连的所有边当中,被删了的边要介于 \([1,n-1-\lceil\frac{n-1}2\rceil]\) 之间,然后我们删了这个点之后就能归纳了。

那是不是一定存在这么一个点呢?感受一下,大概确实如此。

然后它这个询问操作本质上就是,你给一个度数下界 \(x\),它给你返回 lower_bound 的编号,并且顺便把这个点删掉,再找不直接相连的一个点,给你返回编号。这东西一点感觉都没有,感觉在乱问。

这种东西一般都是要先有一个找哈密顿路径的算法,然后对着这个算法套交互上去。

我们猜一个做法:考虑每次选择剩下能走的点当中,度数最小的一个,并且把这个点删除掉。怎么感觉不太对。

好消息是写了个暴力发现这玩意确实是对的。坏消息是你用它给的询问似乎没办法实现这个算法。

阅读了 sol。

这个题的逻辑应该是这样的:首先我们意识到这是套了交互的壳,本质上是要找一个适应这种询问的哈密顿路径算法。然后猜测这个算法是递归的,我们尝试归到更小的情况,然后进行组合。这个时候我们之前分析出来的,这个点被删了的边要介于 \([1,n-1-\lceil\frac{n-1}2\rceil]\) 就有用了,因为你进行一些计算发现,剩下的肯定要有度数大于 \(n-3\) 的点,你就分这个度数是 \(n-2\) 还是 \(n-1\) 讨论。如果是 \(n-2\) 我们直接就可以到一个更小情况,如果是 \(n-1\),你发现还得带一个添头,这个添头显然度数越小越好,事实上我们只需要它 \(\le n-3\) 就可以了,然后把这两个同时删掉,就可以继续做。

感觉思路其实挺清楚的,不应该想不到。

[CF1984 D]

要糖丸了。看了 tag 才会这个东西。

刚读题觉得挺神秘的啊。

其实你想一下,只要 \(t\) 不是全都是 a,我们把整个字符串当中的 a 都删了,那 \(t\) 剩下的部分肯定得是这个新字符串的循环节,这循环节不是很多,然后你再讨论讨论看看这个 a 怎么说就行了。

复杂度大概是 \(O(n\log n)\)

[CF1984 E]

这个一眼就是点分树对吧,它的目标是让我们最大化点分树的叶子个数。

然后你有一个想法就是把点分树变成某种给每个点的标号,这个标号可能是层数也可能是个排列,它大概还要满足一些额外的条件。然后对这个标号去做一些叶子的东西。

我们考虑使用排列的标号方式,这样一个点是叶子当且仅当,它是根并且只有一个儿子,或者它不是根并且周围点的标号都比它小。

那显然,我们为了最大化这样的叶子个数,可以考虑取一个树上独立集,根需要单独考虑。并且这样的选择方案一定对应于一个排列,问题是它是否对应于一个合法排列。

通过感受这股劲,我们大概知道确实对应于一个合法排列。让我们来写一下。

喜报,过了。

[CF1984 F]

这东西看着挺有意思的。

我们先考虑给你一个 \(s\) 让你判合法。

显然可以把 \(s\) 划分成若干连续段 PS,每个连续段内只有开头的元素是不确定的,换言之,我们十分清楚相邻的两个位置能否同时是 P 或者 S,这启示我们找到相邻的两个位置能否是 PS/SP 的条件。

对于 PS 而言,你发现这时你知道了整个序列的和,你只需要要求所有 PS 的和都相同就行了。

对于 SP 而言,你发现如果你知道了整个序列的和,那么你就知道了这两个位置的和是多少,并且经过探究,你发现这些东西都是等价的。

现在发现整个序列的和是很重要的,考虑分有没有 PS 两类来讨论。

如果没有 PS,说明这是 SSSSSPPPPP 类型,你其实还是知道整个序列的和,然后随便做做。

如果有 PS,你发现可能合法的整个序列的和是 \(O(n)\) 种,考虑对每一种和 \(sum\) 分别计算。

你发现这个时候问题变成,给定一些修改,形如钦定 \(a_{i,*}\to a_{i+1,*}\) 是否合法,然后询问最后 dp 的结果。这个显然可以矩阵加上线段树来处理对吧。

那这样,似乎我们就做完了。问题出在,我咋是个 \(O(n\log n)\) 呢?

我们一点点写写看看。

看了 comment 里头有个人也是这么做的,所以我们就对了。写了一下,跑得飞快啊。

[CF1984 G]

通过打表找规律,我们发现,当 \(k=n\) 时,排列不变,当 \(k=n-1\) 时,排列可以变成轮换。

\(k\) 是奇数时,排列可以变成任意结果,当 \(k\) 是偶数时,排列可以变成奇偶性相同的结果。

那显然找到最大的 \(k\) 我们可以解决了,问题是怎么用这个 \(k\) 进行排序。

\(k=n/n-1\) 都是 trival 的。我们考虑一般的情况。先考虑 \(k\) 是奇数的时候。

算了不用考虑了,你发现这个操作基本上跟 \(k+1\) 的轮换是等价的,然后就变成了 sd 一轮的那个题。

~ [mxr24 A]

看上去不是很困难。

显然,让 \(k\) 是黑色比较困难,我们考虑反面。因为最后的终止情况是不能有相邻的白球,因此它左右两侧必须是黑球,因此 \(k-2,k+1\) 必须进行过操作。

剩下的就是两块独立的长度分别为 \(k-3,n-k-2\),我们只需要计算出现这种情况的概率就可以了。这概率可以考虑对每种最终情况出现的概率进行加和。

具体来说,如果一个最终情况,它有 \(p\) 次操作,那么出现这种最终情况的概率就是 \(p!\frac{(n-2p-1)!!}{(n-1)!!}\),而对于一个长度是 \(n\) 的段而言,它最终进行了 \(p\) 次操作的方案数是 \(\binom{p+1}{n-2p}\),那么真正的答案就是

\[\sum_{p=0}^{k-3}\sum_{q=0}^{n-k-2}\binom{p+1}{k-3-2p}\binom{q+1}{n-k-2-2q}(p+q+2)!\frac{(n-2p-2q-5)!!}{(n-1)!!} \]

阅读了一些 tip。

我们进行一个感受,发现两侧是独立的。也就是说,如果我们记 \(dp_n\) 为长度为 \(n\) 的序列,最后染色要求最右侧的是白色的概率,那么答案就是 \(dp_kdp_{n-k+1}\)

考虑怎么算这个 \(dp\),考虑你第一步是怎么走的,于是就有 \(dp_n=\frac 1{n-1}\sum_{i=1}^{n-2}dp_i\)

所以上面的计算方法是错误的,原因是每次操作的概率是在不停改变的。

感觉我烂完了。

这个题还有一些不清楚的地方,就是为啥两侧是独立的。毕竟你真的把算式列出来的话,你左侧取一个数也会影响接下来的概率,并且还有左右取的顺序的问题。

[mxr24 B]

这个是不是只有 sam 能胜任这种工作。

先考虑计数。

对每个 sam 节点,我们来考虑这一组 endpos 相同的节点,它们合法的条件是什么。

首先,\(len\ge mxgap(endpos)\),这样可以保证它能够把中间部分给覆盖了,然后 \(mxgap\) 可以启发式合并什么的随便做做。其次,\(lps(s,s_i)\ge v_p,lsp(s,s_i)\ge v_s\),这个是在处理可以超出去的部分。

而因为这一组它们是一条后缀链,所以 \(lps\) 本质上是在 kmp 的 fail tree 上跳到 lowerbound 处,然后相当于又被转化为了 \(len\ge val\) 的要求,其实就是起始位置在一个区间里头,终止位置都相同。

\(lsp\) 本质上是对翻转之后 kmp 的 nxt 数组有一个 \(\ge\) 的要求,那这个其实可以被我们扔到主席树上做就行了对吧。

那现在计数我们会了,考虑怎么找最短、字典序最小的一个。

首先考虑最短怎么做。这个可以类似求出来这个最短的长度。然后有一个比较菜的做法,就是我们把所有长度是这个的给它提取出来,然后一个个 check,直接定位到 sam 上节点去爆算就行了。

UOJ 里的一个数学题

三个人在玩游戏,一开始随机两个人对局,每个人赢的概率都是 \(\frac 12\),一个人轮空。接下来输的人轮空,剩余两人对局,一直进行直到存在一个人输了 \(k\) 次为止。问期望对局数。

显然,我们可以考虑序列 \(S\) 记录下来每一局的败者,这个序列只有相邻两项不能相同的路径,并且这样的序列跟对局情况是一一对应的。

考虑在这个序列上存在一个人出现了 \(k\) 次,不妨假设这个人是 C,那显然 C 的 \(k\) 次出现把序列 \(S\) 分成了非空的 \(k\) 段,每段内部一定是 AB/BA 交替出现。这样我们情况已经很确定了,剩下的就是计算部分。

[百度之星 2024 第一轮初赛 B]

为啥我三分钟还没写出来???

显然,如果设 \(T=\text{lcm}(1,2,\dots,n)\),那么最后的答案就是

\[\begin{aligned} ans&=\sum_{1\le i<j\le n}\frac T{\text{lcm}(i,j)}\\ &=T\sum_{1\le i<j\le n}\frac{\gcd(i,j)}{ij}\\ &=T\sum_{d=1}^n\frac 1d\sum_{1\le i<j\le\frac nd}\frac 1{ij}[\gcd(i,j)=1]\\ &=T\sum_{d=1}^n\frac 1d\sum_{1\le i<j\le\frac nd}\frac 1{ij}\sum_{x\mid i,x\mid j}\mu(x)\\ &=T\sum_{d=1}^n\frac 1d\sum_{x=1}^{\frac nd}\mu(x)\sum_{1\le i<j\le\frac n{dx}}\frac 1{x^2ij}\\ &=T\sum_{d=1}^n\frac 1d\sum_{x=1}^{\frac nd}\frac{\mu(x)}{x^2}S(\frac n{dx})\\ &=T\sum_{z=1}^nS(\frac nz)\sum_{x\mid z}\frac{\mu(x)}{xz}\\ &=T\sum_{z=1}^n\frac{S(\frac nz)}z\sum_{x\mid z}\frac{\mu(x)}x\\ &=T\sum_{z=1}^n\frac{S(\frac nz)F(z)}z \end{aligned} \]

首先 \(T\) 的计算,我们可以依次找出每个质因子的次幂来解决。

\(F\) 的计算,你可能可以直接认为这是 Direclet 前缀和,使用 FMT 相同的方法可以做到 \(O(n\log\log n)\)。为了理性愉悦,我们尝试做到 \(O(n)\)

这需要这函数的特殊性质。考虑我们乘上一个质数 \(p\) 之后会发生什么。不妨设 \(z=z'p^\alpha\),如果 \(\alpha=0\),那么 \(F(zp)=(1-\frac 1p)F(z)\);如果 \(\alpha\ge 1\),那么 \(F(zp)=F(z)\)。这样,我们就可以筛一筛了。

\(S\) 的计算,我们先计算出 \(\frac 1i\) 的前缀和 \(s_i\)\(\frac 1{i^2}\) 的前缀和 \(t_i\),那么

\[S(x)=\sum_{1\le i<j\le x}\frac 1{ij}=\frac 12(\sum_{1\le i,j\le x}\frac 1{ij}-\sum_{i=1}^x\frac 1{i^2})=\frac 12(s_x^2-t_x) \]

至此,我们可以在线性时间内解决这个问题。

来都来了,顺便手推一下线性求逆元的部分。

\(p=xq+r\)

\[0\equiv xq+r\\ -xq\equiv r\\ -qr^{-1}\equiv x^{-1} \]

nm,想错了。

它是每遇到一次都会打一次招呼,所以 \(i<j\) 的打招呼次数是 \(T(\frac 1i-\frac 1j)\),白浪费感情!!!

posted @ 2024-06-17 07:00  PYD1  阅读(8)  评论(0)    收藏  举报