Atcoder试题乱做 Part9

太阳会升, 月亮会下, 地球会转, 我们的轨道始终一致.


\(\text{[ABC241H]Card Deck Score}\)

\(\color{green}{\text{[EASY]}}\)

为什么这种题也做不出来了./kk

写出答案的生产函数 \(f(x)=\prod\limits_{i=1}^{n}{\dfrac{1-(a_ix)^{b_i+1}}{1-a_ix}}\) , 我们分成两部分来看 \(\prod\limits_{i=1}^{n}{\dfrac{1}{1-a_ix}}=\sum\limits_{i=1}^{n}{\dfrac{c_i}{1-a_ix}}\) .

所以 \(1=c_1(1-a_2x)(1-a_3x)\cdots(1-a_nx)+c_2(1-a_1x)(1-a_3x)\cdots(1-a_nx)+c_n(1-a_1x)(1-a_2x)\cdots(1-a_{n-1}x)\) , 尝试把 \(c_i\) 构造出来, 对于取 \(x=a_i^{-1}\) , 对应的 \(1-a_ix\) 会变成 \(0\) , 所以可以构造 \(c_i=\left((1-a_1a_i^{-1})(1-a_2a_i^{-1})\cdots(1-a_{i-1}a_i^{-1})(1-a_{i+1}a_i^{-1})\cdots(1-a_na_i^{-1})\right)^{-1}\) .

所以有 \(f(x)=\prod\limits_{i=1}^{n}{\left(1-(a_ix)^{b_i+1}\right)}\sum\limits_{i=1}^{n}{c_i(1+a_ix+(a_ix)^2+\cdots)}\) .

对于前半部分, 由于总共只有 \(2^n\) 项, 并且只用关注次数小于 \(m\) 的项, 所以可以直接枚举子集计算, 对于某一项 \(k\) 其贡献为 \(d_k\sum\limits_{i=1}^{n}{c_ia_i^{m-k}}\) , 其中 \(d_k\) 为前半部分 \(x^k\) 的系数.

时间复杂度 \(\mathcal{O}(2^nn\log{m})\) .


\(\text{[ABC240H]Sequence of Substrings}\)

\(\color{green}{\text{[EASY]}}\)

注意到选出的串长度不会超过 \(\sqrt{2n}\) , 字符串哈希, 然后做最长上升子序列差不多的 \(dp\) 即可.

时间复杂度 \(\mathcal{O}(n\sqrt{2n}\log{n})\) .


\(\text{[ABC238H]Removing People}\)

\(\color{green}{\text{[EASY]}}\)

考虑倒着来, 断环为链, 求带权方案数除以 \(\dfrac{1}{n!}\) , 考虑区间 \(dp\) , 设 \(g_{i,j}\) 表示最后删的是 \(i,j\) , 往闭区间 \((i,j)\) 里填数的方案数, 枚举最后被删的数 \(k\) , 记 \(k\)\(i\)\(j\) 删除的方案为 \(cnt\) , 转移为 \(g_{i,j}=\sum\limits_{k=i+1}^{j-1}{cnt\times g_{i,k}\times g_{k,j}\times \binom{j-i-2}{k-i-1}}\) .

记答案为 \(f_{i,j}\) , 转移为 \(cnt\times f_{i,k}\times g_{k,j}\times \binom{j-i-2}{k-i-1}\) , \(cnt\times g_{i,k}\times f_{k,j}\times \binom{j-i-2}{k-i-1}\) , 令 \(d\)\(i\sim k\)\(j\sim k\) 的距离和, 那么 \(f_{i,j}\) 还得加上 \(d\times g_{i,k}\times g_{k,j}\times \binom{j-i-2}{k-i-1}\) , 最后答案即为 \(\dfrac{\sum\limits_{i=1}^{n}{f_{i,n+i}}}{n!}\) , 时间复杂度 \(\mathcal{O}(n^3)\) .


\(\text{[ABC235H]Painting Weighted Graph}\)

\(\color{green}{\text{[EASY]}}\)

傻逼题目, 调了一个多小时.

Kruskal 重构树之后树上背包, 注意去重即可, 时间复杂度 \(\mathcal{O}(nk)\) .


\(\text{[ABC248H]Beautiful Subsequences}\)

\(\color{green}{\text{[EASY]}}\)

肯定是枚举右端点看有多少合法左端点的套路, 注意到 \(k\) 很小, 所以等价于对于每个 \(r\) 求有多少 \(r=\max-\min+l-w\) , 其中 \(w\in [0,k]\) , 直接分块维护即可, 时间复杂度 \(\mathcal{O}(nk\sqrt{n})\) .


\(\text{[ABC246H]01? Queries}\)

\(\color{green}{\text{[EASY]}}\)

考虑没有修改, 明显是个矩阵乘法优化 \(dp\) , 带修就套个矩阵乘法上去就行了, 时间复杂度 \(\mathcal{O}(9q\log{n})\) .


\(\text{[ABC247H]Rearranging Problem}\)

\(\color{green}{\text{[EASY]}}\)

有两个经典结论, 交换两个位置置换环个数要么加 \(1\) 要么减 \(1\) , 一个排列能在交换 \(k\) 次之后达到当且仅当 \(n-c\leqslant k\)\(n-c\equiv k\pmod{2}\) , 其中 \(c\) 为置换环个数.

那么我们可以根据此来 \(dp\) , 令 \(f_{i,j}\) 为考虑了前 \(i\) 个位置, 置换环个数为 \(j\) 的方案数, 转移考虑是新开一个置换环还是加入某个原有的环, 即 \(f_{i,j}=f_{i-1,j-1}+f_{i-1,j}\times|\{x\mid 1\leqslant x<i,c_i=c_x\}|\) .

这东西类似第一类斯特林数的转移, 可以分治 NTT 优化, 时间复杂度 \(\mathcal{O}(n\log^2{n})\) .


\(\text{[ABC244H]Linear Maximization}\)

\(\color{green}{\text{[EASY]}}\)

\(ax+by=b(\frac{a}{b}x+y)\) , 直接李超树维护就行了, 注意符号和 \(b=0\) .


\(\text{[ABC245H]Product Modulo 2}\)

\(\color{blue}{\text{[NORMAL]}}\)

唉, 好典啊, 但我不会.

明显是给 \(m\) 分解成 \(p_i^{q_i}\) 然后 CRT 合并, 也就是方案数全乘起来, 所以我们来看这个子问题 \(\prod\limits_{i=1}^{k}{x_i}\equiv n\pmod{p^q}\) , 且 \(0\leqslant x_i<p^q\) 怎么做.

如果是 \(p\) , 在 \(n\not= 0\) 时其实就是前 \(k-1\) 可以数可以随便放, 最后一个数来决定结果, 所以答案为 \((p-1)^{k-1}\) , 而 \(n=0\) 时答案为 \(p^k-(p-1)^k\) .

如果是 \(p^q\) , 那么也有类似的东西, 答案数量只与 \(n\)\(p\) 的幂次 \(a_n\) 有关, 可以 dp , 令 \(f_{i,j}\) 为考虑了前 \(i\) 个数, 当前乘积 \(p\) 的幂次为 \(j\) 的方案数, 转移的时候需要 \(cnt_i\) 在范围内有多少数 \(p\) 的幂次为 \(i\) , 这个也是好求的 \(cnt_k=\begin{cases}(p-1)p^{q-k-1} & k<q\\1& k=q\end{cases}\) , 答案即为 \(\dfrac{f_{k,a_n}}{cnt_{a_n}}\) .

矩阵加速这个 dp , 或者直接 BM 求都行, 其实这个东西是个组合数, 挺经典的, 懒得管了.


\(\text{[ABC250H]Trespassing Takahashi}\)

\(\color{green}{\text{[EASY]}}\)

对于每个房子为起点跑个最短路求出每个点距离最近的房子, 对于一条边可以判定是否是两个房子之间的最短路上的边, 把所有房子之间的最短路径排序, 询问的时候并查集合并查询即可.


Then together, twilight and seasons.

posted @ 2023-03-02 00:54  Lonely923  阅读(95)  评论(0编辑  收藏  举报