WrongAnswer_90

一言(ヒトコト)

SD 互测

my blogs

Day 1

link

T1 一眼二分答案。

T2 神秘数位 dp,花20min 左右过了样例,感觉有点虚还写了个拍子(暴力写的比正解慢),交的时候忽然发现最后的 \(ans\) 没有取模,非常可怕,幸好改过来了。

T3 开始读错题了,真无语,以为每个盘子只能用一次。。。由于看错题,想了好久还是不会,然后先开的 T4。

想了一会,感觉只会 \(\mathcal O(n^2\log n)\),发现了一点性质但是没注意,赛后发现甚至比较接近正解,感觉再想下想想说不定有希望。。赛时由于感觉时间不多了打的暴力,拿了链和菊花的部分分 48pts 直接跑路。

回来看 T3,发现读错了题,非常自闭,稍微想了想感觉差不多会了。

首先转化为图论模型,\(f_{i,j}\) 表示走到了第 \(i\) 个桩,用的第 \(j\) 个圆的最小代价,然后随便跑最短路。\(m\) 看似大的可怕,但由于 \(r\) 的限制,有用的实际不多,开始的时候单调栈优化一下,踢出 \(r_i<r_j\) 并且 \(c_i>c_j\)\(i\),然后暴力 \(\mathcal O(Tn^2m^2\log(n^2m^2))\)。跑大样例发现 200ms 左右,虽然复杂度是假的,但是感觉问题不是特别大。这个东西赛后测的发现是能过的,但是赛时的代码出问题了,导致挂了 32pts,疼死了。

正解是后缀优化建图,即 \(r_i>r_j\),若 \((u,x)\) 转移到 \((v,j)\) 合法,则转移到 \((v,i)\) 也合法,所以直接只转移最小的 \(j\),然后点内差分之后后缀优化建图复杂度就是 \(\mathcal O(Tn^2m\log (n^2m))\),赛时为什么想不到呢/kk/kk。

更优秀的做法是 \(\mathcal O(Tn^2m)\),给 kdw 咔头了。

UN_P___0X@24_QJ`42HBF12_tmb.png

T4 sol

最后总分 \(100+100+68+52=320\),T4 数据真的水,一个 \(2\times 10^4\) 的数据竟然放的 \(\leq 5\times 10^3\),多过了一个点。竟然 rk5/jy。

总结:首先 T3 读错题是致命的,直接少了近 1h 的有效思考时间,T4 感觉挺厉害的,但其实也没那么难,主要是没时间想了。听说 lhy 3min 直接秒了但没调出来/kt/kt/kt/kt/kt。

其次 T3 没想到后缀优化建图,本来能过的暴力也挂了。

ps:

1.PNG

高二学长们每周五下午第二节是唯一的体育,教练说要打比赛的时候都觉得体育上不了了,但是我们的山东一哥 do_while_true 只花了一个小时就 AK 了,并且他是本场唯一 AKer。然后他直接去上体育了/kt/kt/kt。

Day 2

link solution

T1 T2 T3 T4

LgxTpre,do_while_true 和我出(搬)的题。实际上本来 T2,3,4 是原来的 T1,2,3,但是 dwt 觉得应该出简单些就把 T4 叉了换了一个简单题。

第一次出比赛,出了 114514 个锅/kk/kk。mikefeng 轻松 AK/kt/kt/kt。

dwt 那天没来,晚上我讲的题,讲的感觉不太好,十分尴尬。

赛后 yhy 说 T3 可以做的更强,真给他咔头了。感觉 idea 很妙啊。

Day 3

link solution

感觉这场有点太厉害了/jk/jk。

T1 简单题,找直径然后随便搞。

T2 一眼等价类划分,然后矩阵快速幂。

写了好久,这种题还是写得少。最后卡在了 怎么把一个 1e5 位的十进制数转成二进制,但是明明可以直接十进制下倍增的。。。真的太蠢了,yx 一眼秒了,我完全想不到,感觉没救了/kk/kk。

T3 赛时想到 \(\mathcal O(n\log n)\) 做法,但是被 T2 干碎,直接摆了。实际上打了暴力 40 就赢麻了。

首先条件 1 和长度不超过 \(m\) 限制的结合是好处理的,直接单调队列。重点是怎么解决条件 2 和长度的限制的结合。

01 序列,差的限制,考虑做 \(+1-1\) 前缀和,问题转化为寻找一个 \(f_j\) 最小的 \(j\) 并且 \(j\geq i-m,sum_i-k\leq sum_j\leq sum_i+k\),可以在 \(sum\) 这一维上建线段树,单点用单调队列或者 multiset 维护单点最值,类似扫描线的思路(?)每次删除 \(i-m\) 的贡献,插入 \(i\) 的贡献。这样可以做到上面说的 \(\mathcal O(n\log n)\)

但是这题有完全想不到并且不会用非常厉害的特殊性质:

  1. \(\forall i,0\leq f_i\leq n\)

  2. 若一个 \(sum\) 对应的 \(minn\) 用单调队列维护,则队列中最多有两种值:\(minn\)\(minn+1\)

证明:记 \(pos1\)\(minn\) 的位置,\(pos2\)\(minn+1\) 的位置,则对于一个 \(i\),若 \(sum_i=sum\),则一定有 \(f_i\leq minn+1\)。因为 \(pos1\) 在单调队列中,所以 \(pos1\geq i-m\),证明 \(i\) 是可以由 \(pos1\) 转移而来。所以不可能出现比 \(minn+1\) 更劣的 DP 值。

  1. \(abs(sum_i-sum_{i-1})=1\)

性质 3 提示我们可以从上一次的位置移动取值的左右端点 \(l=sum_i-k,r=sum_i+k\)

性质 2 帮助我们省掉了 multiset 的一只 \(\log\),我们只需要维护 \(sum\) 维度上的 \(minn,minnpos,minmpos\) 即可。(其实暴力用链表实现单调队列也可以把 \(\log\) 去掉,但是显然不如这种做法优美)

性质 1 则提示我们可以用桶维护当前 \(sum_i-k\leq j\leq sum_i+k\)\(sum=j\) 的所有的值。注意这是把 \(sum\) 看成序列,桶来维护序列上 \(f\) 的最小值。这样我们可以再加一个 \(ans\) 指针表示当前桶内的最小的有值的位置。

这样我们扩张端点的时候直接把 \(ans\)\(minn_x\)\(\min\),但是只有这些还是不够,我们仍然不能维护缩小端点时的删除操作后的最小值,这样 \(ans\) 指向的 \(t\) 删空了之后我们不知道新的 \(ans\) 在哪。但是还有一条性质:

  1. \(f_i\leq f_{i-1}+1\)

首先 \(f_{i-1}\leq ans_{i-1}+1\),所以 \(f_i\leq ans_{i-1}+2\)。根据这条性质,若当前的 \(i\) 在移动指针之后 \(t_ans=0\),直接把 \(ans_i=ans_{i-1}+1\),这样 \(f_i\leq ans_i+1\) 仍然成立。所以如果把 \(ans+1\) 后指向的桶的值仍然为空,那也不管了,意思是 \(f_i\) 可以由 \(f_{i-1}\) 转移过来。

T4

感觉严格弱于 T3,但是赛时被干碎直接没仔细想,后来发现也不是那么困难。

考虑区间中最早出现的最大值的位置 \(x\)。对于 \(x<i\leq r\),以它为结尾的最大权子序列的起始位置一定严格 \(>x\),所以对于右半部分区间的限制是假的。

对于左边的部分 \(l\leq i<=x\),以它为开头的最大权子序列一定包含 \(x\)。所以我们可以简单维护以 \(i\) 为结尾的最大权值 \(l_i\),以 \(i\) 为开头的最大权值 \(r_i\),区间 \(\max\) 及其位置。这四个东西都可以用 ST 表维护。复杂度 \(\mathcal O(n\log n+q)\)

T3,T4 都十分厉害,完全想不到。T3 想到暴力之后也不应该摆烂,问题转化为单点修改区间 \(min\) 之后,敢出到这个数据范围,就说明有更厉害的性质,没有深究,一直在无意义的烦躁。T4 看上去也不是那么困难虽然赛时想法完全歪了,也是没有仔细发掘题目中贪心上升子序列的性质。T2 一眼秒了一大半,但是写的太慢,并且最后完全想不到十进制倍增,能调出来还不错。单纯积累套路是不够的,感觉思维被禁锢了。还是要练练代码和推性质能力,扩扩思路。

Day 4

link sol

T1

降智了。若 A 认为自己不比 B 强则 A 向 B 连边,若合法则一定有环,而环上的点一定都相等。所以把相等的全选了,然后把子集全选了,复杂度 \(\mathcal O(n^2)\)

T2

神秘推式子题,做法似乎和 sol 不太一样?枚举第三个字符的位置 \(i\) 和第五个字符的位置 \(j\),在前面找两个 \(s_j\),后面找一个 \(s_i\),在中间找一个与两个都不相同的。然后大力拆式子,拆出来依托答辩,可以只枚举 \(i\) 然后枚举 \(s_j\),神秘前缀和可以直接做到 \(\mathcal O(62n)\),赛时竟然被卡空间/kk/kk。

T3 咕咕咕

T4

不会广义串并联图被干碎了。。首先把 \(dp\) 值挂在边上,\(f_{i,0}\) 表示第 \(i\) 条边两边的端点颜色不同时边的内部的颜色方案数\(f_{i,1}\) 表示两边的端点颜色相同时边的内部的颜色方案数。起始都为 \((1,0)\)

每次删掉一度点直接 \(ans=ans\times(f_{i,0}+f_{i,1}(K-1))\)

删掉二度点,把两个端点连一条新边,边权为 \(((K-2)f_{a,0}f_{b,0}+f_{a,1}f_{b,0}+f_{a,0}f_{b,1},(K-1)f_{a,0}f_{b,0}+f_{a,1}f_{b,1})\),有重边直接叠合,dp 值对应相乘。

这样将以上操作对于每个点都进行之后得到一张新图。因为总度数是 \(2m\),一度和二度点全部都被删掉,假设剩下的全都是删不动的三度点,其度数之和为 \(3n'\),则 \(3n'\leq 2m=2n+6\),所以新图的点数不超过 \(6\)。直接暴搜最小表示,设 \(col\) 为当前爆搜出来的颜色数,所有边数用之前的 DP 值乘起来为 \(sum\)。则答案累加 \(ans A_{K}^{col} sum\)

加强版 咕咕咕

Day 5

林毅又登顶了,sto Anonymely orz

lgx 场切 T4,咔头了,但是 T2 直接贺的板子导致数组开小没 AK/cf/cf。

link

T1 等价于全局加和全局平移。

T2 最大半联通子图。完全不知道放这种题有什么意义。

T3

枚举 \(a,b\),设 \(t_{i,j}\)\(\sum_{k=1}^{n}[a_k\leq i\wedge b_k\leq j]\),最后推出来 \(3^i\times 2^j\times (2^{t_{i,j}}+2^{t_{i-1,j-1}}-2^{t_{i,j-1}}-2^{t_{i-1,j}})\).。

扫描线四遍,横轴是 \(i\),纵轴是 \(j\),每个位置存 \(2^j\),加点就是后缀乘 \(2\),每次查询全局和乘 \(3^i\) 累加。

对于 \(2\) 的次幂和 \(t\)\(j\) 错位的情况,直接乘的时候整体平移一位即可。

T4 咕咕咕

Day 6???

Day 7

link

T1 二分答案,二分取到的最小的值,最后可能有剩余,再加进去。要开int128。

T2 \(f_i\) 表示两边都有 1 的中间连续 \(i\) 个 0 的消除方案数。枚举第一个消除的位置,乘一个组合数就行了。

T3 整体二分求出每个点被击破时间,贪心对应即可。

T4 最多 \(n\sqrt n\) 个点对有贡献,一个点对的贡献区间在 \(dfn-dfn\) 二维平面上是几个矩形,扫描线,支持 \(\mathcal O(\sqrt n)\) 查询,\(\mathcal O(1)\) 区间加即可。空间 \(\mathcal O(n\sqrt n)\),赛时被卡/fn/fn。

赛后 T4 换 short 过了,差点 AK,mikefeng 痛失唱歌 +1 机会。

posted @ 2023-10-13 20:43  WrongAnswer_90  阅读(50)  评论(0编辑  收藏  举报