Loading

VP 记录

前言

从 2023.10.27 开始,每天 VP 一场 ABC / ARC / Div2 / Div1。要补题并写总结。

持续更新 ing...

2023.10.27 - ABC255

第一天先开一场 ABC 试试水。

A 题手速题,1 分 08 秒过,还是慢了点。

B 题被翻译诈骗了,还想了一手二分,但看到 \(n\le 1000\) 直接枚举。不过为什么 B 题会出一道不是计算几何的计算几何。5 分 26 秒过题。

C 题也被翻译诈骗,翻译把第一个条件翻译成了:将 \(1\) 加到 \(X\)。看了一手样例才发现是让 \(X\gets X+1\)。那么首先将大于最大值和小于最小值判掉,再二分找到等差数列中最接近 \(X\) 的两个数即可。不过二分要分 \(D>0,D=0,D<0\) 三种情况分类讨论,还有一些特判。吃了一发罚时。15 分 43 秒过。

D 题一开始看错题了,以为是每个数都要变成 \(X_i\) 中的一个,花了五分钟写了一个 set 后才发现看错题了。原题是 \(Q\) 个询问,那么直接将询问离线按 \(X_i\) 排序,\(A\) 也排一遍序,双指针求出当前小于 \(X\) 的数的和 \(s_1\),大于等于 \(X\) 的数的和 \(s_2\),小于 \(X\) 的个数 \(m\),用 \(s_1-mX+(n-m)X-s_2\) 更新答案。29 分 19 秒过题。

E 题是简单题,只要确定了 \(A_1\) 就可以确定 \(A\) 的整个序列,设 \(A_1=a\),那么容易推出 \(A_i=d_i\pm a\),其中 \(d_i\) 可以递推出来,即 \(d_i=s_{i-1}-d_{i-1}\),而 \(d_1=0\),当 \(i\) 是奇数时取正号,否则取负号。那么我们只需要枚举 \(A_i\) 等于 \(X\) 中的哪一个,用 map 维护此时对应的 \(a\) 的出现次数。最后的答案就是 map 中的最大值。39 分 50 秒过。

F 也是简单题,我们在 \(l\) 中可以直接找到一个点的子树对应的区间,用 \(p\) 可以找到一个点的两个子节点,递归处理即可。56 分 07 秒过题。

G 题是博弈论,不会,直接跳了。

H 一看就是 ODT,我在每个节点上维护当前的值,每个时间段暴力更新所有区间,如果数据水时间复杂度期望是对的,但 T 了 4 个点。赛后发现可以直接维护最后一次被清空的时间,这样时间复杂度就是对的 \(O(q\log q)\) 了,只需要改一点点就可以。

最后 VP 榜上 rk 19,映射回原排名 rk 143,表现分 2335。(居然这么高,超常发挥了)

继续保持,不要降智。

不过 H 没切还是很可惜的,ODT 调久了。

2023.10.28 - ABC256

继续 ABC。

A 题手速明显加快,0 分 29 秒过题。

B 题翻译不知道翻译了个什么鬼,花了好几分钟才看懂题,4 分 47 秒过题。

C 题是一个答辩爆搜,check 复制六遍就可以了,12 分 03 秒过。

D 题是简单题,做一个差分再扫一遍就可以了,15 分 50 秒过。

E 题也是简单题,从 \(i\)\(X_i\) 连边,跑一遍拓扑排序,不在环上的点贡献为 \(0\),在环上的点贡献环上的最小值。24 分 23 秒过。

发现 F 和 H 都是数据结构,脑抽了,先写的 H,花了 20 分钟糊了一个 H 的 ODT,但寄了,回去看 F。

F 很快就出做法了,用线段树维护 \(C\),支持区间加等差数列,区间求和,就可以直接做了。对每个线段树节点维护两个标记 \(k,b\),将等差数列当作一次函数,两个一次函数可以直接合并,也就是 \(k,b\) 直接相加。求和可以直接用等差数列求和公式。写起来也不难。但因为有几个地方没取模被创飞了,吃了六发罚时。94 分 07 秒才过。

最后 VP 榜 rk 45,原排名 384,表现分 1963。

不要好高骛远!!

2023.10.30 - ABC263

星期天放假,摆了一天。实力显著下降,降智严重。

还是 ABC。

A 题手速题写了 1 分 30 秒。

B 题也是手速题,3 分 09 秒。

C 题还是手速题,4 分 53 秒。

D 题被创飞了,换了两种写法,感觉都挺对的,但错了,吃了两发罚时。25 分 39 秒过,成小丑了属于是。

E 题是简单题,设 \(f_i\) 表示从 \(i\)\(n\) 的期望步数,那么有:\(f_i=1+\dfrac{1}{a_i+1}\sum\limits_{j=i}^{i+a_i}f_j\),左右都有 \(f_i\),那么化一下式子:\(f_i=\dfrac{a_i+1}{a_i}+\dfrac{1}{a_i}\sum\limits_{j=i+1}^{i+a_i}f_j\),再用前缀和优化一下就可以了,34 分 18 秒过。

F 题先想了一个看起来挺对的贪心:建一颗查询最值的线段树,分治做,每次查询该层的最大值,计入答案,再将这次的子树按照最大值所在的链裂成若干个小子树,时间复杂度应该是 \(O(n^22^n)\) 的,但很遗憾错了。然后一直在想 DP 怎么 D,到最后也没 D 出来,怎么回事呢?

最后 VP 榜 rk 44(居然进步了),原排名 384 (居然一样!),表现分 1926。(为什么前面的两个都不降,而这个下降了)

D 题被创了,怎么回事?

F 切不出来了,怎么回事?

2023.10.31 - ABC264

没几次 ABC 了。

A 题常规手速题,但手速不怎么样,1 分 02 秒过。

B 题少有的有点意思,根据 \((x,y)\) 到中心的距离的最小值的奇偶性来判断,也就是 \(\min(|x-8|,|y-8|) \bmod 2\) 的值,若为 \(1\) 则是黑色。4 分 10 秒过。

C 题又是 ABC 传统模拟,先跳了。

D 题手速题,将大小关系存到 map 里,然后直接冒泡排序求逆序对就可以了,因为 atcoder 没有重复字符。

E 题是简单题,将询问离线倒着扫,将断边变成加边,用一个并查集维护就可以了,合并需要特别关注,对每个集合维护 sizvis,分别表示:集合中城市的个数,该集合中是否有电厂,这样就行了。但因为没看数据范围 RE 了一发,还有一个伞兵错误又 WA 了一发,罚了两发才过。17 分 48 秒过。

回去写 C 题,直接 \(2^{10}\times 2^{10}\) 枚举哪些行不选,哪些列不选就行了,常数极小(因为有很多剪枝)。24 分 03 秒过。

F 题是一个不是很简单的 DP,刚开始想的是设 \(f_{i,j}\) 表示从上方走到 \((i,j)\) 的最小值,\(g_{i,j}\) 表示从左方走到 \((i,j)\) 的最小值,然后按照左方和上方连续 \(1\) 的个数来转移,但假了。之后才想到设 \(f_{i,j,x,y},x,y\in \{0,1\}\) 表示到达 \((i,j)\),第 \(i\) 行是否反转,第 \(j\) 列是否反转的最小值。那么所求就是 \(\min(f_{n,m,0/1,0/1})\),有初值 \(f_{1,1,0,0}=0,f_{1,1,1,0}=R_1,f_{1,1,0,1}=C_1,f_{1,1,1,1}=R_1+C_1\)。转移也比较简单:

\[\begin{cases} f_{i+1,j,0,y}\gets f_{i,j,x,y}&a_{i,j}\oplus x\oplus y = a_{i+1,j}\oplus y\\ f_{i+1,j,1,y}\gets f_{i,j,x,y}+R_{i+1} &a_{i,j}\oplus x\oplus y \not = a_{i+1,j}\oplus y\\ f_{i,j+1,x,0}\gets f_{i,j,x,y}& a_{i,j}\oplus x\oplus y = a_{i,j+1}\oplus x\\ f_{i,j+1,x,1}\gets f_{i,j,x,y} +C_{j+1}& a_{i,j}\oplus x\oplus y \not = a_{i,j+1}\oplus x\\ \end{cases}\]

最后 61 分 38 秒过了。

VP 榜 rk 24,原排名 263,表现分 2120。

还可以吧,但注意罚时。

posted @ 2023-10-27 22:00  TKXZ133  阅读(45)  评论(0)    收藏  举报