ABC251

Link

A,B,C都是模拟题没啥好说的。

D 最开始想的是贪心做,以为信息熵足够贪心就行,然后发现不对。。。。。

然后看拿什么1,2,4,8,15什么的自然想到能不能把二进制拆开那么做。,这样数量太多了。 所以大概就能想到按10进制分,就xx0000,xx00,xx这样三组恰好 297。


E 很简单的DP,拆下环就行。


F 想了一小会,是调整那样做,复杂度爆炸。

然后突然想起来tarjan无向图没有横叉边,然后第一问dfs显然了。。。。。

既然第一问是dfs,也不难想到第二问是bfs。

tarjan救命属于是。


G 简单题但是输给了基本功不行。

看成了闵氏和,第一次。。

首先最后的交一定只有 \(n,n\leq 50\) 条边,因为是平移原图型。

就是顺时针来讲,一条边(向量)的限制是”对应点在这个向量顺时针方向“,也就是叉积 \(\leq0\)

然后我们需要找到平移最远的一个向量,这个是相当于点到直线距离,你可以叉积算面积然后除以底。

这样你就可以 \(O(mn+nq)\) 求解了。


Ex 典中点套路题。

贡献是 \(\binom{n-k}{i} \bmod 7\) 然后实际上我们对每个结果点,计算每一段区间的贡献。

大概记 \(d=n-k\) ,就是要看一段区间 \([l,r]\)\(\sum\binom{d}{i}\)

这个东西可以直接lucas然后数位 DP,会多\(\mathrm{polylog}\)。 (好像甚至是2log的。。)

冷静想一下,实际上虽然我们要算 \(O(km)\) 个区间,但是对于每个 \(i\) 不同的 \(k\) 只会加入 \(O(1)\) 个值。

这样就直接lucas可以做到 \(km\log\) 的。

仔细思考一下发现我们从 \(l\) 加到 \(r\) 如果我们暴力枚举进位过程的话,那么进位次数是 \(O(r-l)\) 的,考虑进位次数的上界是 \(\frac{d}{7}+\frac{d}{7^2}+\frac{d}{7^3}+\cdots\)

这样我们暴力模拟进位过程每次复杂度可以看成均摊 \(O(1)\) 的。实际表现不慢。


ABC251
https://proton-z.github.io/2022/05/15/abc251/
作者
Imitators
发布于
2022年5月15日
许可协议