Codeforces vp 寄
难度标记:
\(\verb!A!\) :基本上秒了。
\(\verb!B!\) :有一定难度,需要想一会或者需要看题解,但看完题解后就完全理解了。
\(\verb!C!\) :看完题解后还需要想一会,甚至仍然不会。
+ 和 - 表示在同档题中的难度。
注:题解中的题号对应洛谷题号,可能会出现 \(\rm Div1A\) 是某场 \(\rm Div3G1\) 的情况。
Codeforces Round 694 (Div. 1)
最终 \(\rm performance\) \(2568\),大概在正式选手前 \(140\)。
简要题解:
CF1470A($\verb!A-!$)
考虑贪心,显然 \(k_i\) 越大的需要先匹配。
于是排序,能匹配就匹配即可。
\(2 \min\) 就过了。
CF1470B($\verb!A!$)
发现两个数 \(x,y\) 满足 \(\dfrac{\text{lcm}(x,y)}{\text{gcd}(x,y)}\) 是个完全平方的条件是质因子分解后每个质因子的奇偶性相同。
考虑把 \(a_i=\prod p_i^{q_i}\) 改成 \(a_i=\prod p_i^{q_i \bmod 2}\),然后合并同类项,计每种 \(a_i\) 的出现次数为 \(siz_{a_i}\)。
发现如果 \(siz_{a_i}\) 是个偶数则会在第一轮以后和 \(0\) 合并。
然后就做完了,判断 \(w\) 是不是 \(0\),然后对应输出就行了。
用时 \(25 \min\),主要是开 \(\verb!long long!\) 被卡常了。
CF1470C($\verb!B-!$)
没切。
其实这题也不难,但是有点神秘。
需要发现一个关键性质就是在伪装者左边的人会 \(<k\),右边的会 \(>k\),如果距离它很远,还没有被扩散到就是 \(k\)。
然后就可以每次跳 \(i\) 步,直到跳到一个点 \(\neq k\),然后根据这个点的值往左或往右走最多 \(i\) 步,找到伪装者。
大概只要五六百次就能找到。
CF1470D($\verb!A!$)
非常 \(\rm Atcoder\) 的构造题,但是很简单。
发现图不连通就寄了。
否则考虑 \(\rm Dfs\) 生成树,遍历点 \(x\) 的所有返祖边(包括 \(x\) 和 \(fa_x\) 之间的边),如果 \(x\) 通过返租边能走到一个被染色的点,那么 \(x\) 就不染色,否则染色。
不难发现这样一定连通,于是做完了。
用时 \(21 \min\)。
Codeforces Round 905 (Div. 1)
最终 \(\rm performance\) \(2348\),大概在正式选手前 \(252\)。
最下饭的一集。
简要题解
CF1883G1($\verb!A-!$)
先把 \(a\) 序列和 \(b\) 序列
对于每个 \(a_i\) 找到 \(b\) 中第一个 \(j\) 满足 \(b_j>a_i\),令 \(d_i=j\)。
不难发现答案就是 \(\max |d_i-i|\),要特判 \(b\) 中没有东西大于 \(a_i\) 的情况,此时 \(d_i=n+1\)。
然后就做完了,\(6 \min\) 过了,此时一切正常。
CF1883G2($\verb!A-!$)
先假设 \(a_1\) 是最小的。
对于 \(a_1\) 不是最小的情况,相当于前缀减。
由于值域很大,但是不同的答案只有 \(\Theta(n)\) 个,排序离散化一下就做完了。
看起来很简单是吧,但是我有很多下饭操作:
-
看错 \(m\) 的值域,以为可以暴力枚举,不需要离散化。
-
离散化写的很丁真,调不出来。
最后花了 \(37 \min\) 过 /yun,一罚。
CF1883B($\verb!A-!$)
挺傻的一道题,也几乎看完就秒了。
假设我最终要经过点 \(p_1,p_2,...,p_m\)。
那么我显然越早经过 \(p_i\) 越优。
做一个类似 \(\rm Dijkstra\) 的过程,每次取出 \(dis_x\) 最小的 \(x\),然后遍历 \(x\) 的出边,对于每种时间点维护一个 \(\rm vector\),每次在 \(\rm vector\) 上二分就行了。
花了 \(16 \min\) 才过,主要是题目看错了一次。
CF1883C($\verb!A+!$)
一开始在想哈希。
维护两颗线段树,分别维护当前哈希值和最优的哈希值。
然后每次在线段树上二分找到第一个不同的位置就行了。
但是写了一会儿后发现非常阿拉丁,并且会被卡常。
果断换做法。
考虑维护 \(a_i-best_i\)。
在线段树上二分找到第一个 \(a_i-best_i<0\) 的位置,然后 \(\rm check\) 一下这个位置前面有没有 \(a_j-best_j>0\) 即可。
\(45 \min\) 才过 /yun,两罚。
CF1883D($\verb!B!$)
大概是不是很难的题。
考虑如何做到 \(\Theta (nq)\)。
枚举值域分界点 \(i\),把 \(\le i\) 的放在左边,\(>i\) 的放在右边,判断行不行。
但是这很难优化。
不妨假设 \(a_i\) 是值域分界点,然后求出 \(l,r\) 的范围。
首先 \(a_i\) 得是左边的区间最大值。
设 \(x\) 为 \(a_i\) 左边第一个大于它的数,那么 \(x<l \le i\)。
同时右边的区间必须得全部 \(>a_i\)。
设 \(y\) 为 \(a_i\) 右边第一个大于它的位置,\(z\) 为 \(y\) 后面第一个小于 \(a_i\) 的位置。
那么 \(y \le r <z\)。
这样就变成了 \(\Theta (n)\) 个矩形,判断某个点是否在这些矩形里。
离线然后用 \(\rm Bit\) 维护即可。

浙公网安备 33010602011771号