AtCoder Regular Contest 073~077

C D E F
ARC073 \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+}}\) \(\color{red}{\texttt{-}}\) \(\color{red}{\texttt{+}}\)
ARC074 \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+1}}\) \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+}}\)
ARC075 \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+}}\)
ARC076 \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+2}}\)
ARC077 \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+}}\) \(\color{green}{\texttt{+}}\) \(\color{red}{\texttt{+}}\)
\(\color{green}{\texttt{+}}\):赛时通过 \(\color{red}{\texttt{+}}\):赛后通过 \(\color{gray}{\texttt{+}}\):未知 \(\color{red}{\texttt{-}}\):嘴巴

AtCoder Regular Contest 073

D. Simple Knapsack

考虑枚举选了 \(t\) 个。显然这些至少有 \(w_1t\) 的大小,直接从 \(W\) 中减掉。

但是这样背包还是会很大啊。注意到此时所有物品大小都是 \(\{0,1,2\}\),总大小只有 \(3n\)。复杂度 \(O(n^4)\)

提交记录

E. Ball Coloring

考虑我们无论如何最小值和最大值一定会出现在式子里,不妨枚举它们是否同一颜色。如果是的话就是 联合省选2021D1T1,否则也差不多就是一个双指针。

有点屎,代码咕咕咕了。

F. Many Moves

考虑 dp。设 \(f_{i,j}\) 表示做了前 \(i\) 次转移,另一个棋子留在 \(j\) 的最小方案。

即:

\[f_{i,j}+|q_{i+1}-q_i|\rightarrow f_{i+1,j} \]

\[f_{i,j}+|q_{i+1}-j|\rightarrow f_{i+1,q_{i+1}} \]

然后第一部分显然是一个定值,第二部分考虑对 \(q_{i+1}\) 左右分类讨论,本质上是一个区间最小值。

直接线段树处理即可。

初始情况特殊处理。复杂度 \(O(n\log n)\)

提交记录

AtCoder Regular Contest 074

E. RGB Sequence

考虑非常暴力的思路:对于一个序列,固定右端点,左端点向左移动过程中颜色数必然是不降的。

所以用 \(f_{i,j,k}\) 表示当前在 \(i\) 位置,左端点为 \(j\) 时开始两种颜色,为 \(k\) 时开始三种颜色。可以发现所有限制可以通过这三个信息判断是否合法。

然后枚举下一个颜色是哪一种(为了方便可以枚举是 \(i/j/k\) 位置的颜色),直接转移即可。复杂度 \(O(n^3)\)

提交记录

F. Lotus Leaves

考虑行列建点,可以发现一个荷叶的作用其实只有从某一行转移到某一列。

转化成最小割模型,直接跑流即可。复杂度 \(O(n^3)\)

提交记录

AtCoder Regular Contest 075

E. Meaningful Mean

考虑整体减 \(k\),就变成 \(\geq 0\) 子区间个数。转化成区间大于等于某个数个数。

可以用值域线段树,当然也可以 pbds 直接水。复杂度 \(O(n\log n)\)

提交记录

F. Mirrored

先枚举长度 \(l\)。这样对于 \(a_i\)\(a_{i-l}\) 其实我们只关心他们的差 \(d_i\)

考虑两个数的差其实就是 \(\sum d_i(10^{l-i}-10^i)\)。其中 \(d_i\in[-9,9]\),毛估估一下不会有太多可能,事实上每个位置最多只有两种 \(d_i\) 满足条件。

暴力枚举,复杂度 \(O(2^{\lg V}\log V)\)

提交记录

AtCoder Regular Contest 076

E. Connected?

手模一下可以发现只要两端有一个不在边界上,这条线就一定可以连上。所以只要考虑在边界上的情况。

然后就是很经典的问题了。考虑拆环为链,可以发现无论怎么拆,相交线的永远相交,不交的线永远不交。最后判一下这些区间有无相交关系即可。

提交记录

F. Exhausted?

考虑用 Hall 定理。可以发现在这里子集 \(S\) 对应的节点数为 \(\min\{m,\max L(S)+m-\min R(S)\}\)

首先考虑最外面那个 \(m\),这与 \(S\) 无关,那么一定让 \(|S|\) 最大即为 \(n\)。换句话说要求答案至少为 \(\max(n-m,0)\)

那么将 \(m\) 拆掉后,剩下的式子中 \(L(S)\)\(R(S)\) 就可以分开算了。不妨令 \((L,R)\) 表示的区间为 \([-L,m-R]\),容易发现两者等价。

这样就变成一个经典问题:有 \(n\) 个区间,每个区间要求选择一个点,不同区间不能选同一个点,问有几个匹配。
经典的构造是:按区间右端点排序,每个区间取能取的点中最靠左的点,不能取即没有匹配。证明考虑对增广路径的情况分类讨论,可以得到不存在增广路径。

用线段树/set 维护。复杂度 \(O(n\log n)\)

提交记录

AtCoder Regular Contest 077

E. guruguru

首先先认为每次操作都是按 forw,贪心地想,如果 fav 按钮位置在 \(a_i\)\(a_{i+1}\) 的路径上,那么一定会先摁这个按钮,收益是 \(a_i\) 到这个按钮的位置的步数 \(-1\)。显然这构成一个公差为 \(1\) 的等差数列,差分一下最后推一遍即可。

复杂度 \(O(n)\)

提交记录

F. SS

可以发现 \(f(SS)=STST\),其中 \(T\)\(S\) 最短的 period。再模拟一下可以发现 \(f^2(SS)=STSST\),令 \(g(S)=ST\),可以发现 \(g^i(S)=g^{i-1}(S)+g^{i-2}(S)\),可以发现是斐波那契数列的形式。直接暴力递归处理复杂度就是 \(O(n\log V)\) 的。

提交记录

posted @ 2021-11-09 20:01  Flying2018  阅读(35)  评论(0)    收藏  举报