ABC251
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)\) 的。实际表现不慢。