0%

Codeforces Round #768

A. And Matching

样例已知\(n=4,k=3\)无解.

首先直接配对就可以得到\(k=0\)的解.

注意到\(k<n\)如果\(k\neq n-1\), 直接将\(k\)\(n-1\)配对, \(0\)\(n-k-1\)配对即可.

\(k=n-1\)时, \((n-1,n-2)\ (1,3)\ (2,n-4)\ (0,n-3)\)可以解决问题.

D. Flipping Range

因为\(b_i\le n/2\), 通过叠加可以实现辗转相减. 于是考虑\(b=\gcd(B)\)即可.

\(b\ge2\)时, 操作是不满秩的, 考虑非自由元部分, 每一个操作在消元后, 只会在前\([0,b-2]\)个位置里留下1个1, 或者全为1. 直接计算消除每一位上的1需要花费的最小价值.

计算答案时对全取正需要的操作消元后, 枚举是否全部异或上1, 根据非自由元的满足情况舍弃这些位置上的最小值即可.

E. Expected Components

利用Burnside引理分别计算component总数, 和本质不同的排列总数.

其中环上component等于相邻不同色的下标个数.

于是可以对每一个颜色二元组计算贡献.

线性基

构造方法

  • 逆序枚举 $ t $ 所有为 $ 1 $ 的二进制位 $ j = L $,对于每个 $ j $
    • 如果 $ a_j $,则令 $ t = t a_j $
    • 如果 $ a_j = 0 $,则
      • 枚举 $ k [0, j) $,如果 $ t $ 的第 $ k $ 位为 $ 1 $,则令 $ t = t a_k $
      • 枚举 $ k (j, L] $,如果 $ a_k $ 的第 $ j $ 位为 $ 1 $,则令 $ a_k = a_k t $
      • 令 $ a_j = t $,结束插入过程

*注意: 加粗的步骤保证了特殊性质.

特殊性质

如上构造的线性基具有很优秀的性质:

每一行要么是空行, 要么a[k]==1并且只有\(i\gt k\) 并且不在线性基中的位\(i\)才有可能为1. 于是看一个数是否属于线性空间, 只需要异或上 存在于线性基中的元素 ,看其他位置是否全0.

题目

2018-2019, ICPC, Asia Yokohama Regional Contest 2018 Problem I - Ranks

参考文献: 线性基学习笔记 | Menci's Blog

AtCoder Grand Contest 003

C - Pushing Balls

期望是可以迭代的. 推式子可以发现第一步操作以后的期望距离序列依然是等差数列,于是递归.

D - Shik and Game

单调队列优化DP ## E - Shik and Travel 二分+DP,将严格不优的状态去掉就能做到\(O(n\log n)\)的状态数.

AtCoder Grand Contest 006

C - Rabbit Exercise

推式子发现该操作就是把坐标差分的期望序列中相邻两项互换, 于是做完. ## D - Median Pyramid Hard 看到排列, 并且与排序相关, 显然二分答案变成01序列做. ## E - Rotate 3x3 首先发现每一列都一定是\(\{3k,3k+1,3k+2\}\),并且奇偶列之间不会交换. 于是变成了分奇数与偶数列的冒泡排序问题, 同时需要考虑每一列的方向变化. ### 法一 直接模拟冒泡排序, 计算每一列拍完序的方向. 时间\(O(n\log n)\), 实现繁琐. ### 法二 题解的神仙做法. 如果分别计数不考虑方向合法性的合法序列个数与实际合法的序列数(暴搜), 发现正好是4倍关系, 这隐含着两组对称性. 考虑以偶数列为中心的操作, 每次既改变了奇数列排列的奇偶性, 也改变偶数列反方向列个数的奇偶性. 于是计算排列的奇偶性和反向列的个数对比即可判定合法性. ## F - Blackout 神仙题! 首先手玩几个数据, 将发现可以连的边与\((d(x,z)\mod 3)\)有关. 如果把图3-染色, 发现每个点只能与下一个颜色的点连边. 对于一个弱连通块, 存在如下结论: 1. 如果不存在\((x,y), (y,z)\), 显然不能连边. 2. 如果可以3-染色, 则两种相邻颜色的所有点之间都可以连边. (可以不断进行迭代, 最后每一组边都一定可以被两个相邻的边表示出来) 3. 如果不能3-染色, 则任意点之间都可以连边. (考虑一定存在环长不为3的倍数的环, 不断分割就可以得到自环, 由于弱联通, 可以从自环出发, 得到它与所以点组成的二元环, 最终得到所有的自环, 就可以构造任意边了)

于是把图划分连通块染色即可.

双栈法/Baka's Trick

回避删除的尺取法

要求可以快速插入,快速合并区间答案. 参考博客 核心是预处理出区间左半边的答案,从而在不涉及删除的情况下实现左指针右移. CF1549D ## 双栈法

线段树分治

实现

动态问题(元素存在生存周期)/无可减性的区间询问

  1. 使用线段树上DFS(CDQ)实现.
  2. 将元素按生存周期拆成\(O(\log n)\)个/将询问按下标拆成\(O(\log n)\)个.
  3. 需要支持元素插入/回滚操作.
  • 特殊情况可以使用BFS,需支持对DS统计信息的重置. ### 静态问题,难以删除元素 例: 整体二分
  1. 可以BFS实现
  2. 将询问按下标/值域拆成\(O(\log n)\)个.
  3. 需要支持插入/清空操作. ## 按问题类型 ### lifespan LOJ #6515. 「雅礼集训 2018 Day10」贪玩蓝月 ### 对询问分治 ZR #2180. 矩阵 ### parallel binary search AGC002 D - Stamp Rally

「LibreOJ NOI Round #2」不等关系

题目描述:

给定一个字符串,仅包含 <> 两种字符。你需要计算「使得\(p_i<p_{i+1}\)当且仅当 \(s_i\)< 的排列 \(p_1,p_2,\dots p_n\) 」的数量。

考虑容斥:<不满足即为>满足,故原问题转化为求满足多个连续段递增的排列数目。

利用FFT优化DP连续段即可。

\[ \begin{aligned} f_0=&1 \\ f_n=&\sum_{k<n}\mathrm{islt}(s_{k})(-1)^{cnt(n)-cnt({k+1})} {n\choose k} f_k \end{aligned} \]

AtCoder Regular Contest 132

D - Between Two Binary Strings

notice the position of \(n\)-th '1' in a valid string should always between that in both s and t.

Yet this conclusion can be written in a more compact form: \(\forall i, \#s[1,i]=\#t[1,i]\).

The problem can be solved greedily as long as the restrictions are meet.

Proof:

Consider a string to be a 2D path, where '0' means go forward and '1' means go up.

Thus we need to minimize the turns we made.

It's sufficient that we never make a turn unless we collide with the border.

Submission #28217621 - AtCoder Regular Contest 132

E - Paw

Key: the resulting string always looks like this: <<<<<xxxxxxx>>>>>>, where x stands for the original character.

The key observation yields to a straight-forward DP solution.

Submission #28219119 - AtCoder Regular Contest 132

F - Takahashi The Strongest

Let's find the probability distribution of all possible situations.

Let \(\sigma:[0,2]^k\times[0,2]^k\rightarrow [0,3]^k\) be the mappings from the strategy of 2 players to situations.

Suppose \(s=\sigma(u,v)\), then

$$ s_i= \[\begin{cases} 3,u_i\neq v_i\\ u_i,u_i=v_i \end{cases}\]

$$

We can calculate the probability distribution by convolution:

\[ Pr_s=\sum_{s=\sigma(u,v)}Aoki_uSnuke_v \]

To implement that, we simply derive a new transform from FWT, which will work in \(O(k4^k)\) time.

Formally, Let \(F_s=\sum_{s=\sigma'(u)}Aoki_u\), and \(G_s=\sum_{s=\sigma'(u)}Snuke_u\).

Notice in mapping \(\sigma'\), every \(c\in[0,2]\) points to both \(c\) and \(3\).

Then \(Pr_s=F_s \cdot G_s\) yields naturally.

To calculate the probability of Takahashi winning over all scenarios, we just need to perform a similar process.

Submission #28266429 - AtCoder Regular Contest 132

AtCoder Grand Contest 005

D - ~K Perm Counting

通过容斥(二项式反演), 最后变成了多条链上的独立集问题. ## E - Sugigma: The Showdown 经典博弈论找结论做法. 1. 找到不合法条件 2. \(\Delta\)想办法把结论作为条件带回去继续做. 3. 此题将得到Sigma永远在子树内活动的结论.

F - Many Easy Problems

用虚数结论推一年, 算边的贡献一步做完...