首页 > 其他分享 >Atcoder试题乱做 Part8

Atcoder试题乱做 Part8

时间:2023-02-27 11:33:55浏览次数:48  
标签:Atcoder 试题 limits dfrac 复杂度 text Part8 mathcal sum

我喜欢这样跟着你,随便你带我到哪里.


\(\text{[ABC231H]Minimum Coloring}\)

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

显然的行列二分图模型, 一个可以染色的格子对应一个权值为 \(c_i\) 的边, 求最小带权最大匹配.

至于没匹配的点, 一定是选它的连边中权值最小的, 所以对于每个点我们令其相连的边最小值为 \(v_i\) , 对于一个格子 \((a_i,b_i,c_i)\) , 连一条 \(a\) 到 \(b\) 流量为 \(1\) , 权值为 \(v_a+v_b-c_i\) 的边, 跑最大费用可行流即可, 答案即为 \(\sum{v_i}-ans\) .


\(\text{[ABC227H]Eat Them All}\)

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

注意到一个点入度出度之和为 \(2a_{i,j}\) , 根据这个为限制可以列出一个 \(12\) 元 \(1\) 次方程, 总共有 \(9\) 条限制, 所以存在 \(4\) 个自由元, 暴力枚举每个自由元, 枚举的时候加点剪枝, 同时保证建出来的图连通, 每个元 \(x_i\) 直接拆成 \(x_i\) 条边跑欧拉回路即可.

时间复杂度 \(\mathcal{O}(200^4n)\) .


\(\text{[ABC229H]Advance or Eat}\)

\(\color{red}{\text{[HARD]}}\)

每列是独立的, 则一个列的状态可以有 \(3^n\) 种, 它们连成一个 \(DAG\) , 问题变成有一个 \(DAG\) , 每条边为白色或者黑色, 分别对应只有先手能这样走和只有后手能这样走, 总共有 \(n\) 个棋子, 两人轮流移动棋子, 不能移动的人输.

这是经典的不公平博弈, 超现实数解决, 我们只需要证明 \(DAG\) 上的每个点的数值都不会是未定义即可.

我们证明评估价值可以通过 \(DAG\) 的拓扑序中的归纳法来定义, 假设我们现在关注的是点 \(v\) , 而且拓扑序在它之前的所有点都有定义, 那么只需证明如果存在一条白边 \(v\rightarrow a\) 和一条黑边 \(v\rightarrow b\) , 那么 \(eval_a<eval_b\) , 其中 \(eval\) 表示评估价值.

如果 \(v\rightarrow a\) 和 \(v\rightarrow b\) 都表示吃掉一个棋子, 那么我们令 \(c\) 为这两个棋子都被吃掉的状态, 那么存在黑边 \(a\rightarrow c\) 和白边 \(b\rightarrow c\) , 根据归纳假设 \(eval(a)<eval(c)<eval(b)\) .

同样的, 如果两个操作相互不干扰, 那么都存在上述这种 \(c\) , 可以用类似方法论证, 唯一例外是 \(v\rightarrow a\) 对应吃黑棋, \(v\rightarrow b\) 对应推进这个棋(白棋同理), 但在这种情况下存在白边 \(b\rightarrow a\) , 所以 \(eval(a)<eval(b)\) .

直接按超现实数做法做即可.


\(\text{[ABC230H]Bullion}\)

\(\color{red}{\text{[HARD]}}\)

设答案的组合类为 \(\mathcal{F}\) , 空袋子的组合类为 \(\mathcal{H}\) , 金条的组合类为 \(\mathcal{G}\) , 根据题目可得 \(\mathcal{F}=\mathcal{H}\times\operatorname{MSET}_{\geqslant 1}(\mathcal{F}+\mathcal{G})\) .

其 OGF 为 \(F(z)=z\times \left(\exp{\left(\sum\limits_{i>0}{\dfrac{F(z^i)+G(z^i)}{i}}\right)}-1\right)\) , 即 \(F(z)+z-z\exp{\left(\sum\limits_{i>0}{\dfrac{F(z^i)+G(z^i)}{i}}\right)}=0\) .

这个形式启发我们通过牛顿迭代得到 \(F\) .

我们不妨设 \(H(z)=G(z)+\sum\limits_{i>1}{\dfrac{F(z^i)+G(z^i)}{i}}\) , 对于任意 \(i>1\) 的 \(F(z^i)\) 和 \(G(z^i)\) 都可看做常数.

重写式子为牛顿迭代需要的式子 \(A(x)=x+z-z\exp{\left(x+H(z)\right)}\) , 求导得 \(A'(x)=1-z\exp{(x+H(z))}\) , 可得到 \(F(z)=F_0(z)-\dfrac{F_0(z)+z-z\exp{(F_0(z)+H(z))}}{1-z\exp{(F_0(z)+H(z))}}\) .

若视求解 \(H(z)\) 在 \(z^n\) 项内的截断复杂度为 \(\mathcal{O}(n\log{n})\) , 则总时间复杂度为 \(\mathcal{O}(n\log{n})\) .


\(\text{[ABC233H]Manhattan Christmas Tree}\)

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

感觉碰到这种题就曼哈顿和切比雪夫或者互相转一下就行了.

转完之后二分答案, 变成二维数点.


\(\text{[ABC234H]Enumerate Pairs}\)

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

抽象题, 这我没想到.

平面分块, 划分成若干个 \(K\times K\) 的正方形, 对于一个在正方形内的点也只会有和以这个正方形为九宫格中心的正方形内的点可能合法, 暴力枚举每个点以及其九宫格中每个点即可.

然后来分析复杂度.

我们假设一个正方形内有 \(x\) 个点, 我们将这个正方形划分成四个 \(\dfrac{K}{2}\times \dfrac{K}{2}\) 的小正方形, 小正方形内的点必然满足, 我们设这四个小正方形分别有 \(a,b,c,d\) 个点, 我们有 \(a+b+c+d=x\) ,不妨设 \(a\geqslant b\geqslant c\geqslant d\) , 因此 \(a\geqslant \dfrac{x}{4}\) , 所以一个小正方形内至少有 \(\dfrac{a(a-1)}{2}\) 个点对, 是 \(\mathcal{O}(x^2)\) 的, 带小常数.

设 \(cnt_i\) 表示第 \(i\) 个正方形内的点数, 我们有 \(\sum{cnt_i^2}\leqslant 400000\times C\) .

我们匹配相邻九宫格的复杂度是 \(cnt_icnt_j\) 显然其 \(\leqslant \max\{cnt_i^2,cnt_j^2\}\) , 因此总复杂度还是因此总复杂度还是没变.

可以发现取一个合适大小的正方形效果都是一样的.


\(\text{[ABC239H]Dice Product 2}\)

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

一眼的 \(dp\) , 令 \(f_n\) 表示至少到 \(n\) 的期望次数, 暴力转移 \(f_n=1+\dfrac{1}{N}\sum\limits_{i=1}^{N}{f_{\lceil\frac{n}{i}\rceil}}\) , \(f_n=\dfrac{N}{N-1}+\dfrac{1}{N-1}\sum\limits_{i=2}^{N}{f_{\lceil\frac{n}{i}\rceil}}\) , 答案即为 \(f_{m+1}\) .

记忆化, 整除分块, map 优化空间, 总时空复杂度为 \(\mathcal{O}(m^{\frac{3}{4}})\) .


\(\text{[ABC236H]Distinct Multiples}\)

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

\(a_i\not= a_j\) 这个限制很难受, 考虑给它容斥掉, 对于有相等关系的就连边, 那么会有容斥式子 \(\sum\limits_{S\in E}{(-1)^{|S|}f_S}\) .

我们对于每个点集 \(S\) , 令 \(g_S=\lfloor\dfrac{M}{\operatorname{lcm}\limits_{i\in S}{d_i}}\rfloor\) , \(h_n\) 为 \(n\) 个点构成的完全图选出边集的子集使得 \(n\) 个点连通的容斥系数和.

考虑求解 \(h_n\) , 我们有 \(h_1=1\) , 对于 \(n\geqslant 2\) , 如果没有连通的限制, 那么容斥系数和为 \(0\) , 我们考虑减去不连通的, 令 \(T\subset\{1,2,3,\dots,n\}\) 是包含 \(1\) 的连通块, 在 \(|T|\leqslant n-2\) 时, 容斥系数和相等, 所以只用考虑 \(|T|=n-1\) , 考虑枚举不在集合的那个点可以得到递推式 \(h_n=-(n-1)h_{n-1}\) , 所以 \(h_n=(-1)^{n-1}(n-1)!\) .

对于一个 \(|S|f_S\) 我们把它分成若干连通块 \(T_1,T_2,\dots,T_k\) , 原式等于 \(\prod\limits_{i=1}^{k}{g_{T_k}h_{|T_k|}}\) , 令 \(dp_S\) 表示点集 \(S\) 的容斥和, 我们要求的即为 \(dp_{\{1,2,3,\dots,n\}}\) , 其中 \(dp_{\varnothing}=1\) , 转移考虑枚举最小编号的点所在的连通块, 有递推式 \(dp_S=\sum\limits_{T\subset S,u\in T}{g_{T}h_Tdp_{S\setminus T}}\) .

时间复杂度 \(\mathcal{O}(3^n+2^nn)\) .


\(\text{[ABC237H]Hakata}\)

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

首先有个结论, 一个字符串中本质不同的回文子串数量 \(\leqslant n\) , 证明考虑在字符串末尾添加一个字符, 本质不同的回文串数量最多增加 \(1\) .

考虑反证法, 设添加字符 \(s_n\) 之后 \(s_{x,n}\) 与 \(s_{y,n}\) 均为之前没有出现过的回文子串, 其中 \(x<y\) , 那么根据回文串定义有 \(s_x=s_n=s_y=s_{n+x-y}\) , \(s_{x+1}=s_{n-1}=s_{y+1}=s_{n+x-y-1}\) , 以此类推可以得到 \(s_{x,n+x-y}\) 和 \(s_{y,n}\) 完全相同, 矛盾.

考虑给每个本质不同的回文串编个号, 然后对于包含关系建个 DAG , 若 \(x\rightarrow y\) 则 \(x\) 是 \(y\) 的子串, 那么题目也就是要求最大反链长度.

根据 Dilworth 定理也就是求最小连覆盖数, 这可以二分图匹配, 建一个二分图, 将每个点拆成两个点一个入点和一个出点, 若原 DAG 上 \(x\) 可达 \(y\) , 就从 \(x\) 的出点连向 \(y\) 的入点, 跑一个最大流即可.

时间复杂度 \(\mathcal{O}(n^3)\) .


\(\text{[ABC242Ex]Random Painting}\)

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

又是没见过的期望套路呢.

将线段按 \(L_i\) 排序, 令 \(f_{i,j,k}\) 表示考虑了前 \(i\) 条线段, 覆盖了 \([1,j]\) , 恰好用了 \(k\) 条的方案数, 转移有

\[f_{i,j,k}=\begin{cases} f_{i-1,j,k} & j<R_i\\ f_{i-1,j,k}+\sum\limits_{l=L_i-1}^{R_i}{f_{i-1,l,k-1}} & j=R_i\\ f_{i-1,j,k-1}+\sum_{i-1,j,k} & j > R_i \end{cases} \]

原问题答案即为, 在选出的集合大小为 \(i\) 时还没有覆盖 \([1,n]\) 的概率乘上新选出一个元素的期望次数的和, 即 \(\sum\limits_{i=0}^{m}{\dfrac{\binom{m}{i}-f_{m,n,i}}{\binom{m}{i}}\times \dfrac{m}{m-i}}\) .

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


希望 \(Newbing\) 的申请快点通过吧.

标签:Atcoder,试题,limits,dfrac,复杂度,text,Part8,mathcal,sum
From: https://www.cnblogs.com/Lonely923/p/17159083.html

相关文章

  • Atcoder ABC 291
    AtcoderABC291D题意n张牌,每张牌两面都有数字,可以翻面,问有多少种情况使得这n张牌中每相邻两张牌表面上的数互不相同思路线性dp,每次比较当前位和上一位是否相同即可......
  • Redis高频面试题总结
    前言大家好,我是小卷聊开发。春暖花开即将到来,整理了13道Redis高频面试题,有些不全面还请谅解,感谢观看!!!1.Redis过期键的删除策略定时删除:在设置键的过期时间的同时,创建......
  • 12进制转10进制再转2进制【华中科技大学考研机试题】
    12进制转10进制再转2进制十二进制是数学中一种以12为底数的计数系统,它由0∼9,a,b组成,与十进制的对应关系是:0∼9对应0∼9,a对应10,b对应11。例如,十二进制的a2,十进制是......
  • 前端一面常见vue面试题汇总
    说说你对proxy的理解,Proxy相比于defineProperty的优势Object.defineProperty()的问题主要有三个:不能监听数组的变化:无法监控到数组下标的变化,导致通过数组下标添......
  • 阿里前端常考vue面试题汇总
    Vuex中actions和mutations有什么区别题目分析mutations和actions是vuex带来的两个独特的概念。新手程序员容易混淆,所以面试官喜欢问。我们只需记住修改状态只能是mutat......
  • 16进制转10进制【北京大学考研机试题】
    16进制转10进制写出一个程序,输入一个十六进制的数值字符串,输出该数值的十进制字符串。输入格式输入包含多组测试数据。每组数据占一行,包含一个十六进制的数值字符串。......
  • 前端一面react面试题(持续更新中)
    React性能优化shouldCompoentUpdatepureComponent自带shouldCompoentUpdate的浅比较优化结合Immutable.js达到最优为什么useState要使用数组而不是对象useState......
  • 百度前端高频react面试题(持续更新中)
    说说你用react有什么坑点?1.JSX做表达式判断时候,需要强转为boolean类型如果不使用!!b进行强转数据类型,会在页面里面输出0。render(){constb=0;return<d......
  • 十进制转八进制【华中科技大学考研机试题】
    十进制转八进制点击查看代码输入一个整数N,将其转换成八进制数输出。输入格式输入包含多组测试数据。每组数据占一行,包含一个整数N。输出格式每组数据输出占......
  • AtCoder Beginner Contest 291
    比赛链接A-camelCase题目大意给一个由英文字母构成的字符串\(S\),\(S\)中只有一个大写字母,输出该大写字母是字符串中第几个字母。题目思路遍历字符串找出大写字母......