首页 > 技术文章 > vp记录

houzhiyuan 2022-03-21 19:55 原文

CF1437

Educational Codeforces Round 97 (Rated for Div. 2)

2021.10.7,vp with @ProgramsVSProblems

过了 ABCDEF

T1 一看是一个诈骗题,想了 \(3\) 分钟没什么思路,然后又想了 \(1\) 分钟就过了,\(9\) 分钟时切掉。

队友很快做出 T2 ,\(11\) 分钟。

然后发现 T3 的数据范围很小,直接暴力dp,随便就过了,\(20\) 分钟。

队友 T4 看错,看成dfs,然后卡了。

我发现 T5 显然就是考虑哪些数字可以不变,然后发现如果递增很难维护,想了一会儿后发现可以直接每个数减去编号,这样就是单调不降,直接找 \(b\) 中每两个数中间的区间的最长不降子序列,树状数组乱做就好了。

写代码的时候队友发现 T4 是个贪心,直接切了(罚时 \(1\)次),\(33\)分钟。

然后我写好了 T5,\(41\) 分钟。

然后开 T6,发现是个动态规划,直接考虑排序后从后到前放数,选出一个子序列使得每个数都大于等于前面一个的 \(2\) 倍,再去统计一下放其他数的贡献。

先随便写了个代码,然后吃饭去了。(\(time-30\)

然后发现这题有巨多细节,讨论了很久。

回来后赶紧调,结束后的 \(2\) 秒时,过了。

最后排名 rk94。

CF 1528

Codeforces Round #722 (Div. 1)

2022.3.3 vp by myself。

过了 ABC

开始看 A,发现是个签到题,想要绝对值大显然要么最大要么最小,直接设 \(f_{i,0/1}\) 表示两种情况就好了,\(5\) 分钟过了。

然后看 B ,是个分类讨论题,直接考虑中间的空分类讨论一下。

\[f_i=\sum _{i=1}^{n-1} f_i +g_i \]

\(g_i\) 表示 \(i\) 的因数个数。

\(15\) 分钟过 B。

然后看 C,发现比较困难。

首先这个集合在第一颗树上一定是一条链。

那直接贪心,如果和前面的有冲突就把前面的去掉。

开始感觉好像是树剖一下,然后将重链合并一下。

结果发现树链剖分没什么卵用,直接双指针就好了,然后用树状数组判断 dfs 序是否有矛盾就好了。

写了 \(60\) 分钟,终于写完了,一交,WA on test 2。

心态小崩,开始调。

然后发现选的点在第一条链上不一定是连续的,可以是子序列。

结果发现根本无法维护有哪些与当前点矛盾,想有 set 维护,结果发现好像会爆炸。

自闭了。

过了 \(20\) 分钟,发现一个重要性质,每次加一个点时最多只有一个数与它重复。

直接树状数组维护那个点矛盾,然后就做完了。

\(120\) 分钟过了 C。

还剩 \(15\) 分钟看 D ,结果发现 D 是个超级 sb 题,就是个 dij 的模板,可惜没时间写了。

自闭了,最后排名 rk438。

CF 1528

Codeforces Round #715 (Div. 1)

过了 ABC 题。

太拉了。

先看 A,构造题,不大会,先写了个贪心,结果 WA2。

想了一会儿,发现每个串要么 \(0\) 多要么 \(1\) 多,找到两个同为 \(0\) 多或者同为 \(1\) 多的,然后把这些合并一下就好了。

\(23\) 分钟时过,两个罚时。

然后看 B ,傻逼题,确定一个 \(x\) 后后面肯定是 \(x,x-1,x-2...1\) 的形式,转化成了子问题,dp 完直接做就好了。

\(37\) 分钟过。

看 C,显然一条没有确定的边是所有已知边权的异或和,因为 \(x+y\ge x\ xor y\) ,右边的显然更优。

先把边权为 \(0\) 的放上,然后判断联通性。

发现这个异或和的这条边很难搞,不大会写,寄。

看 D,先搞个置换环,然后发现每个置换环只需要一个菊花就可以满足条件了。

但这样会相交,然后不会了,寄。

一直罚坐,寄。

草,最后才发现 C 很水。

如果没边权的边大于 \(n-1\),那么异或和的这条边就无意义,因为必然可以形成一棵树,可以剩下的随便一个赋值为异或和。

此时先用套路,把边权为 \(0\) 的做完,然后对有边权的做最小生成树就好了。

如果小于,直接暴力枚举那条边变成异或和,直接跑最小生成树,时间复杂度 \(O(n^3)\),但 \(n\) 只有 \(\sqrt{10^5}\) 级别,可过。

\(122\) 分钟过。

最后 rk163。

CF1344

过了 ABC 题。

永远只会 \(3\)

看 A,不大会(?),想了一下后发现是 sb 题,随便做一下就好了。

\(5\) 分钟过 A。

然后看 B,感觉答案应该就是联通块数,但不会判无解。

想了一会儿,发现不能暴力判断无解。

每行每列至少放一个有点用,如果有行没有黑色,而每列都至少有一个黑那就寄了。

看看样例,发现如果一行有不连续的黑的也寄了。

感觉这两个差不多了,写了一些,然后发现过了样例,交了。

\(20\) 分钟过 B。

看 C,发现题面很阿拉丁,看错好几次。

大概推了一些,没看懂题面。

思考好久才发现,\(x_i\) 的顺序是有关的,显然有环就无解,想到拓扑。

然后讨论一下。

\(\forall\) 记为 \(1\)\(\exists\)\(0\)

如果 \(i<j,x_i<x_j\),那么 \(x_j=0\)\(x_i\) 随便选。

如果 \(j<i,x_i<x_j\),那么 \(x_i=0\)\(x_j\) 随便选。

考虑第一个咋做,相当于对于每个 \(x_j\)\(x_i\) 的编号最小值,由于大小关系具有传递性,所以直接拓扑就可以,然后判断 \(x_j\) 是否一定要取 \(0\)

第二个也一样,只不过建反图跑就好了。

\(62\) 分钟过 C。

看 D,发现很困难。

画了一下一个 \(a_i\) 的函数图像,发现在 \(x\in [0,k]\) 是个比较奇妙的函数。

零点为 \(\sqrt{a_i}\),好像没啥用。

显然求导一下,得到 \(-3x^2+a_i\)

然后可以得到极值点是 \(\sqrt{\frac{a_i}{3}}\),不过好像也没啥用。

然后可以发现先对 \(a_i\) 排序后 \(b_i\) 单调递增。

发现根本不会,寄。

分类讨论一下,如果 \(k<\sum \sqrt{\frac{a_i}{3}}\),那么必然一直拿最小 \(a_i\),然后去减它的 \(b_i\)

好像这个贪心对大的也是对的?

不难发现斜率单调递减,所以有一个暴力是用队列每次取最大的。

由于单调递减,可以直接二分??

好像很对,直接开写。

被卡精度了,最后也没能调出来,寄。

最后 rk77。

ABC127

\(41\) 分钟 AK。

信心 vp 赛,班里组织的。

ABC 没啥好说的, \(6\) 分钟过。

D 发现感觉是贪心,随便画了一下就会了,排序后对于最小的取找最大的整容,然后贪心做就好了,\(12\) 分钟过。

E 发现比较困难,推了一个 \(O(nm)\) 的式子,然后把数据范围看错了,以为是 \(n,m\le 2\times 10^5\),寄。

F 发现 sb 题,动态中位数随便乱维护就好了,\(24\) 分钟过。

对着 E 看了好久,终于发现数据范围是 sb,直接做就好了。

具体做法就枚举一下 \(i,j\) 表示两点距离为 \(i+j\),考虑两个点形成一个矩形,一个矩形两种情况,然后组合数乱算就好了。

\(41\) 分钟 AK 了。


CF653

IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2)

2022.5.25

过了ABCDE。

A 直接判断,\(3\) 分钟过。

B 一眼爆搜题,直接上,\(11\) 分钟过。

C 考虑一个点可能对答案的贡献,一组不合法的就把 \(s_i,s_{i+1}\) 加一,最后如果不合法对数大于 \(4\) 就无解,如果 \([1,3]\) 可以直接爆搜,但 \(0\) 好像是个偏序,想半天不会。

结果发现 " It's guaranteed that the given sequence is not nice.",nmsl,没有 \(0\) 的情况,直接上就好了。\(36\) 分钟过。

D 比较困难,先显然二分一下 \(d\),然后咋判断啊。

发现是直接网络流,\(n=50\),直接上。

不贺板子,重打一遍,还被卡精度了,调了一下就过了。\(72\) 分钟。

E 一看,显然先把 \(1\) 扔掉然后剩下的跑连通块,\(n\) 个点扣掉 \(m\) 条边的连通块是典,找度数最大的直接做就好了,然后最后是一个比较阴间的 if 判断,直接来,\(98\) 分钟过。

F 是本质不同匹配括号串问题,感觉可以直接 dp,想半天不会,寄。

开 G,发现可以直接按每个质数考虑,然后计算每个数的贡献,相当于左边选一些,右边选一些,那么对答案的贡献就是一个组合式子,想半天屁都不会,寄。

最后 rk76。


CF1209

Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)

2022.5.26

过了 ABCDE1E2G1。

A sb题,\(4\) 分钟过。B 暴力题,小错误调半天,\(17\) 分钟过。

C 直接贪心填 1,剩下填 2 即可,\(27\) 分钟过。

D 是??题,比较神秘,随便画一下可以发现第一个人必然拿两个,接下来的人贪心拿一个,如果可以拿,最后发现人是边,拿的东西是点,那就是一棵树,所以答案可以直接用连通块算,直接做就好了,\(35\) 分钟过。

E1 感觉是贪心,一看数据范围直接上状压,考虑每行最大值就相当于每行拿一个数,所有方案的最大值,所以可以直接 dp,复杂度 \(O(m3^n)\)\(53\) 分钟过。

E2 就是 E1 的优化,\(3^n\) 没什么可优化的,考虑优化 \(m\),可以发现很多列对答案没有贡献,让最多列贡献也就是每行取一个最大值,所以把所有列按最大值排序,然后找出前 \(n\) 个做,复杂度就变成 \(O(n3^n)\)\(66\) 分钟过。

开 G1,可以发现有一些颜色会相互影响,必然会变成同一个颜色,把这些东西拿出来,可以发现是一堆区间,一个区间的答案就是长度减去众数,暴力做就好了,\(79\) 分钟过。

G2 是带单点修版本,不会。

开 F,可以先把一个边权拆成若干个一位数,然后建虚点,在这个上面跑即可。

降智了,写了个 dfs,然后半天调不出来,改成 bfs,结果又 WA,想半天不会了,寄。

赛后好久才调出来。

最后 rk 134。

推荐阅读