2023.9.3 AT practise

ARC075F

考虑移项,设 \(x=\overline{abcde}\),那么 \(rev(x)=\overline{edcba}\).
那么 \(x-rev(x)=(a-e)\cdot (10^4-10^0)+(b-d)\cdot (10^3-10^1)+c\cdot (10^2)=D\)

考虑 dfs,状态为当前取到第几位,\(D\) 减去前面的值是多少,以及方案数。
枚举每一位的取值,可以有 \(-9\sim 9\) 的取值。
由于如果高位每取满,低位全部取满也无济于事。
所以每位的取值是只有两种,是“\(D\) 减去前面的值”绝对值最小的两种。
方案数只需计算两个数差等于某数的方案数即可,然后每位乘起来。

ARC076E

太牛逼了。
首先不同时在边界上的两个点是无贡献的,因为其是曲线。
我们考虑剩下的曲线是否有相交,两两枚举是不行的。
我们考虑按逆时针把这些点放在一条直线上。
发现这是一个括号匹配问题。只用看匹配的括号是不是属于一组的。

ARC076F

是一个二分图最大匹配问题。
然而直接做是不可做的,即使用线段树优化建图也是时间过大的。
或许 Hall 定理可以启发我们。

二分图的最大匹配是 \(n-\max(|S|-|N(S)|)\)
那么我们只需找到最大的 \((|S|-|N(S)|)\) 即可。
考虑到求并集不好处理,我们考虑处理 \(S\) 里的点不能到达的点求交集再取补集。
\(n-\max(|S|-(m-|\cap _{i\in S} (l_i,r_i)|))\)
\(=n-\max(|S|+|\cap _{i\in S} (l_i,r_i)|-m)\)

那么我们可以先按左端点排序,对于 \(i\),若其交集为 \((l_i,k)\),我们只需要计算 \(l_j\le l_i,r_j\ge ri\)\(j\) 的个数。
由于先前的 \(l_j\) 必定 \(\le l_i\),所以我们只需要一维的计算 \(r_j>r_i\) 有多少个。
用线段树即可。
然而我们还需要枚举 \(k\) 吗?无需,对于 \(r_j\),其对所有的 \(r_i\ge r_j\) 都有贡献,所以直接区间加,到时直接单点查询即可。
我们在第 \(k\) 个位置加上 \(k\),然后直接区间查询最大值即可,结果减去 \(i\),就是所求的 \(\max(|S|+|\cap _{i\in S} (l_i,r_i))\).

ARC077E

先设我们不使用这个“理想按钮”,求出需要多少操作。
考虑每个路径对某个点放置按钮的贡献。
对于 \(A_i\sim A_{i+1}\) 的路径,若在其中某个点 \(X\) 放了理想按钮,可以少走 \(dis(X,A_i)-1\) 次。
其实就是一个区间加等差数列然后求最大值,差分两次即可。

posted @ 2023-09-03 21:14  s1monG  阅读(8)  评论(0编辑  收藏  举报