OwO
03.03 [USACO19JAN]
A. Redistricting
题意:给 $g$ ,求 $f(n)$ 。 $f(i)=f(j)+[g(i)\ge g(j)],j \in (i-k,i]$ 。
离散化之后线段树优化 DP ;或者发现额外贡献最多只有 $+1$ ,单调队列。
B. Exercise Route
题意:给一棵树和一些路径,求有边交的路径的对数。
把与 LCA 关联的点都 $+1$ ,查询除 LCA 外路径上的点。这样除了两条路径 LCA 相同的情况外是没有问题的。相同的时候开 map 暴力统计答案,也可以科学一点,最后把每个点作为 LCA 对应的一堆二元组排序再统计答案。
C. Rain Tracking 2
题意:给 $k$ ,以及 $c_i=\min{a_{i},a_{i+1},\cdots, a_{i+k-1}}$ ,求合法 $a$ 序列数量。
连续 $i$ 个相等的 $c$ ,设 $x=10^9-c$ ,方案数是 $f(i)=\sum_{j=1}^{k}x^{j-1}f(i-j)$ ,扰动一下得到 $f(l+1)=(x+1)f(l)-x^kf(l-k)$ 。
相邻的 $c_x>c_i$ 时,发现可以确定 $c_i$ 对应区间一个 $a$ 的值,并且另外 $k-1$ 个位置要满足的限制是 $\ge c_x$ 。当前讨论的是 $c_i$ 的贡献,所以长度 $l$ 应该减去 $k$ ,然后再统计答案。
多个部分的答案乘起来就是最终答案。
03.14 [FJOI2018]
所罗门王的宝藏
限制如 $a_i+b_i=c_k$ ,线性关系相加减还是线性关系,连边之后任意给一个未知数一个值, DFS 判断是否矛盾。
领导集团问题
% Newuser 大佬神仙贪心。
按第一关键字权值降序,第二关键字深度降序排序。讨论点 $p$ ,在到根路径上如果有点被标记,把最近的点取消标记, $ans$ 不变;如果没有, $ans+1$ 。然后标记自己。之后树剖。
我想的是 DP , $f(i,j)$ 表示 $i$ 为根子树内选择的点最小权值恰好为 $j$ 的最大可选点数。
$$f(i,j)=\sum \max_{son,k \ge j}{f(son,k)}+[A(i)=j]$$
想把第二维合在一起用线段,使得真正维护的元素的后缀和,等于 $f$ 的后缀最大值。
叶节点的信息显然就是 $A(i)$ 位置是 $1$ ,其余是 $0$ 的线段。
可以发现如果忽略 $[A(i)=j]$ ,直接把儿子合并(每一位置对应相加),就能得到当前节点的信息。
然后把 $A(i)$ 位置 $+1$ ,前驱 $-1$ ,就可以得到完整的信息了。有点差分的意思吧,可以发现这样的确得到了正确的信息。
等等,前驱 $-1$ ,取消标记,那这本质就是前面的神仙贪心?
代码特别好写, dsu +multi_set 可以 49 行写完。
邮递员问题
$S,T$ 均两条线段两端时,画图运用三角不等式可以发现最优路径必不存在交叉的情况。
然后我就不明白了 QAQ 。咕咕咕。
Orz
10 + 0 +0 分,爆零预订。
A 题以为不用图论直接判标记,确定值就行。这样不对,线性关系必须依次推,不能把两堆东西合并之后判是否合法。这样的话合法的情况也很有可能被判为非法。
B 题嘛……脑子有点乱,写错了迭代器。暴力被我误删了,太智障了。
C 题想到了 $S,T$ 在两端的结论,其他情况想枚举分割线,因为情况太多所以随机枚举一部分,然后两边用 DP 求解。可行但不一定最优,感觉很不正确,感觉收益率不大,弃了。
好惨啊 Orz 。
03.22 [来自浙江的不可告人的比赛]
A 容斥还是常见套路的,然而我认定了不能从新图推旧图,在求旧图上耗死了; B 题有点神仙,以为网络流或者图论,结果是生成树 + 图论; C 题需要考虑组合意义,没听明白,咕咕咕。
3.24 [51nod 2019 省选第二场]
A. 抽卡大赛
枚举每个人,每张卡的 $a$ 值 $a_0$ ,然后 DP , $f(i,j)$ 表示前 $i$ 个人抽卡后恰好 $j$ 张卡满足 $a_i>a_0$ ,然后算下贡献,加上去。整体 $O(n^4)$ 。
设 $t_i=f(n,i)$ 的 OGF 为 $T(x)$ ,有 $T(x)= \prod (p_i x + 1 - p_i)$ ,其中 $p_i$ 是某个人抽卡 $a_i>a_0$ 的概率,实际上是某人若干张卡片 $p$ 值的和。
将所有人的所有卡片按 $a$ 值排序,然后从大到小讨论。每次移动对 $T$ 的影响仅仅是某个 $p_i$ 增加了一个值,除以旧的,乘上新的。一次除法操作是 $O(n)$ 的,因为有每次除的都是以前乘过的东西这个性质。乘法也是。
所以整体 $O(n^3)$ ,据说多加 $\log$ 会挂。
B. 异或约数和
整除分块,需要求异或前缀和。打表可得它的循环节是 4 。
C. 小朋友的笑话
对于每个笑话,以人为下标建立线段树。同时维护笑话和答案的线段树。
势能分析,对于笑话线段树,其实是在不停涂黑色,涂色区间原来是纯色区间时才可以结束。注意黑色区间是会合并的,并不会拖延之后的操作多次,整体就 $O(n \log n)$ 了。
也可以用 set, map 之类的维护区间的并?差不多吧。
03.25 [USACO18DEC]
A.
设答案是 $g(x)$ 有:
$$g(x)=\max{f(x),\dfrac{g(x-1)+g(x+1)}{2}} \tag{1}$$
注意 $c=\max(a,b)$ 等价于 $a \ge c, b \ge c$ 同时成立,且至少一个取等。
$(1)$ 式第二项限制使得:
$$g(x)-g(x-1) \ge g(x+1)-g(x)$$
对点集 ${(x,g(x))}$ ,在 $x$ 单增时,增量 $h(x)=g(x)-g(x-1) \ge h(x+1)$ ,所以这个点集是一个上凸包。
对 ${(x,f(x))}$ 建上凸包,如果点在凸包上,那就取 $g(x)=f(x)$ 了;如果不在,增量 $h$ 需要取等,就让斜率取等,取 $x$ 在凸包上对应的值。实际上就是把点都取到凸包上。
B.
问题转化,一个元素的移动并不影响其他元素的相对位置。最终集合单增,因此选取的集合的补集单增。为了最小化最终集合大小,应该最大化补集大小,即求补集的 LIS 。原集第 $k$ 小,因此求补集第 $k$ 大 LIS 。
然后每个点维护二元组 $(len,f)$ ,表示以它作为开始的 LIS 长度和对应方案数, $O(n \log n)$ DP 一下。
然后长度从大到小枚举,注意相同长度的 LIS 对应的开始位置的元素的值,从左到右单调递减。由于求第 $k$ 大,所以尽量先考虑大的,从左往右考虑。然后类似权值线段树查第 $k$ 大那样的贪心,取一下就可以了。 注意每个长度取到元素了就 break
掉,并标记不要再讨论左边的元素,然后枚举长度 $-1$ 。算方案数的过程中和 $10^18$ 取 $\min$ (因为这个方案数随便构造一下,上界至少可以到 $(^n_{n/2})$ )。
C.
贪心,合法删除过程中一直只有一个连通块。每个先删 $a$ 才能删 $b$ 的限制连边 $a \rightarrow b$ ,树边当作两条单向边。 $a$ 为根的子树答案是 $0$ ,问题是不知掉根在哪里。类似拓扑排序,取出入度 $1$ 的节点,更新周围节点入度。最后剩下的点度数为 $0$ ,就把它作为根,然后 DFS 一下,不要经过 ${a}$ 中的点,标记到的点答案为 $1$ ,没有到的点答案为 $0$。如果没有这样的点,说明有环,画图可以发现所有点答案都是 $0$ 。
Orz
记住先打暴力,这样至少不会爆 0 吧……输出格式,看好了小朋友!
03.26 [JSOI2018] [AGC]
A. 战争
裸的柯和( Minkowski Addition ),运气可能比较好碰巧看过,就是求 ${c}={a+b}$ ,把两个凸包上的轮廓向量极角排序之后再做一次凸包就可以得到 ${c}$ ,然后判断点是否在新的凸包内:二分,叉积。
B. 机器人
除了斜率 $1$ 方向的格子全是同一个方向以外我好像啥也不懂,挖坑。
C. 列队
贪心。找到最大的 $t$ 使得 $a_t \le k+t-1$ ,然后 $t$ 就将两边的人划分开,算答案时就不需要加绝对值符号了。
持久化线段树,维护区间内人的数量,人的位置的和,最右的人的位置,然后在递归中传一下可以放人的区间,根据左区间最右的人的位置决定一边贡献答案,另一边递归一下, $O(n \log n)$ 。
然而卡常, awsl ,悄悄说一句被卡常的部分我空间也少开了一个 $\log$ ,完蛋。
Orz
快一个月没碰几何了,差点裸题不会做,那真就白给了呀……
所以看了一波模板,补了两个小东西:
- 线段判交。快速排斥实验,就是 Kd-Tree 用来剪枝的那个东西,用线段的外接矩形判交,然而这只是线段相交的必要条件;跨立实验,就是当且仅当 $a$ 两端点跨过直线 $b$ 且 $b$ 两端点跨过直线 $a$ 时,线段 $a,b$ 相交。 跨过直线的充要条件是,设 $x=(a_0 \rightarrow b_0) \times (a_0 \rightarrow b_1),y=(a_1 \rightarrow b_0) \times (a_1 \rightarrow b_1)$ ,则 $xy < 0$ 。
- 多边形重心。就是各个三角形重心,以面积为权值的加权平均数。把各个三角形重心数乘上三角形面积,加起来作为分子,分母是多边形面积。
[AGC021E Ball Eat Chameleions]
红色和蓝色,分别作为 $x,y$ 坐标,枚举红球蓝球数量 $r,b$ ,转化为 $(0,0)\rightarrow (r,b)$ 。
有的路径不合法。贪心地,优先先后给除一号宠物外的每个宠物 $r,b$ ,无法做到时就给一号宠物。分析可以发现这样尽量让所有宠物变红了。一号宠物的红色球个数是 $r-(n-1)$ 。
- 当 $r>b$ ,如果 $y-x \ge r-(n-1)$ ,那一号宠物就不能变红了。
- 当 $r=b$ ,如果 $y-x \ge r-(n-1)$ ,或者最后一个球,也就是最后给一号宠物的球,是红色,那一号宠物也不能变红。所以这时路径是 $(0,0) \rightarrow (r,b-1)$ 。
然后就是快速算不能经过直线的路径数,用 Catalan 的分析方法算一算就好了。好神仙啊这题。
抱歉,我忘了名字
题意:序列中有 $0,1$ 和通配符,相邻三个数字可以变成出现最多次的那个,求最后剩下 $1$ 的方案数。
wxh 的 DP 没看懂,大概能理解“毕克自动机”做法。就是普通的自动机构造,但是神奇地贪心了,有的状态总是比能同样能转移到的另一个状态好,所以每个点 $0,1$ 对应的转移可以贪心地恰好构造为唯一的,这很重要。然后跑匹配, DP 算最后停在某个节点的方案数。
序列自动机
听到有大佬在说序列自动机,看了 OB's blog 里面 FJOI2015 那道序列自动机的题。就是维护每个字符后面添加一个字符能匹配到的最近的位置,类似链式前向星,用处是在公共子序列相关问题, $O(|S| \cdots n)$。听说 PopoQQQ 用主席树能把复杂度中字符集大小那里加个 $\log$ ,没仔细看,咕咕咕。
03.27 [某名校 NOI 模拟] [雅礼 2018 Day10]
A.
题意:长度 $2n$ 的序列,比如 $0829$ 是 good 的,因为 $02+98=10^n$ 。给一个含通配符的序列,求是 good 的方案数。
性质是两个数字对位相加的结果做高到低是若干个 $9$ ,一个 $10$ ,然后若干个 $0$ 。
然后枚举 $a$ 是结果为 $10$ 的那个数字,即方案中一定有 $a+b=10$ , DP 。
B.
题意:环上有一些权值,有一个点权均匀分布在 $[a,b]$ ,然后求什么概率。
把未知点权设为 $x$ ,每个点的答案是一个一次函数,假设已经知道了。然后就是一些半平面 ($k>0$) 求上凸包,每条直线的答案的分子就是它在凸包上 $x$ 坐标的差。
然后求那些一次函数,发现可以 $O(n)$ 暴力 $1$ 号点答案,前缀和推出其他的点 $i$ 作为起点的答案。但是由于环的性质需要分类讨论 $j\ge i$ 和 $j>i$ 两种情况。
C.
咕咕咕。
A. 「雅礼集训 2018 Day10」足球大战
式子写出来,注意特判 $p,q$ 为 $0,1$ 的情况,因为不存在逆元。开空间,开常,只能 $O(n)$ ,只能开一个逆元数组。
B. 「雅礼集训 2018 Day10」文明
据 Newuser 大佬说是虚数裸题 世界树 弱化版。某个点属于一个国家的充要条件是距离最小,或者距离相等时,国家的行动标号最小。
C. 「雅礼集训 2018 Day10」贪玩蓝月
裸线段树分治,注意背包时需要开一个临时变量存答案,因为模意义下不能简单通过枚举顺序来保证物品仅有一个。
03.28 [小概率是雅礼集训]
A. arg
题意:给出长度 $m$ 的序列,求 $1$ 到 $n$ 排列中, LIS 是该序列的个数。
DP 套 DP ,求 LIS 的一种做法是: $f(i,x)$ 表示前 $i$ 个数字,长度 $x$ 的 IS 的最小末尾数字,然后每次贪心地更新状态,或者把当前数字接到某个 IS 后面,作为当前最长的 IS 的末尾数字。
按照套路,果然又发现第二维是单调不降的。所以如果随便放数字而不是恰好放一个排列的话,直接差分,然后二进制状压内层 DP 第二维就可以。考虑数字有限制时,对数字状压,三种状态:未讨论,讨论过并且在内层 DP 的第二维,讨论过但不在内层 DP 第二维。每次枚举未讨论的数字进行转移,如果放了一个给定序列中的数字 $a_i$ ,需要保证 $a_{i-1}$ 已经讨论过。模仿内层 DP 更新状态,或者把数字接到末尾就行了。
B. bsh
题意:给三角剖分图,边权为 $1$ ,询问两点间最短路。
类似 旅行者 (好像是这个名字),那是一道网格图分治。这道题对多边形分治就好了。
然而我码力太差,写了非常久,第一次用 vector<vector>
。
C. cti
题意:一些有向炮台,可以打一炮,但是弹道不能相交,求最大收益。
网络流。某条弹道过了交叉点,另外一边就不能过。转化一下限制,调整边的方向,拆点,加上限制,跑最小割。
Orz
今天翻车了 Orz ……虽然一直很菜,不过……一言难尽。
三道题开场就看出了考察方向,然后挑了最熟悉的 DP 模型,以为是裸题能很快水过,然后 3h 过去了。分治题一开始以为是有简单性质,最后一个小时才觉得只能分治。思路简单,然而没写过类似的题,暴力。网络流日常心理障碍,尝试克服,无法克服,开始暴力,发现暴力打着真费劲,放弃。
然后就翻车了。
教训:网络流还是多想想吧,毕竟性价比比较高,不像复杂 DP 或者数据结构之类的东西容易白耗时间。然后相信:我一定能在 30min 内写对 200 行代码。
03.29
上午打我和 211 的互测题。
A 题裸 Mobius + 莫队,成功用 $n=m=a_i=100$ 的假样例让 hdhd 大佬看错输入格式,拍了一个小时没挂,最后 10 分。我没有被阿,嘿嘿。 B 题组合数求和,需要模型转化,考虑一三象限有一些点,求路径方案数, DP 一下。 C 题正解是差分之后线段树维护,找右边第一个大于 $v$ 的位置。 hdhd 大佬 map + 势能分析通过。考虑许多单调区间,修改操作会使得一些区间合并,一开始有 $n$ 个长度 $1$ 的区间,修改操作只会增加至多 $2$ 个区间。
03.30 [自闭省选模拟]
A.
题意:给一棵树,有一些炸弹在节点上,造成的伤害每扩展一条边就 $-1$ ,直到为 $0$ ,求每个节点受到的伤害和。
点分治,计算子树中炸弹对其他子树的伤害(实际上也贡献到了炸弹所在子树中,所以每次统计答案时需要对所有儿子再进行一次负贡献来消除影响)。然后差分 + 后缀和统计每个深度的答案。
B.
小C的锦标赛弱化版, $n=5000$ 。
题意:求至少含一个 $k$ 元环的带标号竞赛图数量。
考后补的竞赛图性质:
- 如果竞赛图含有 $k$ 元强连通分量,那么存在所有 $[3,k]$ 元环。
- 竞赛图的拓扑序唯一,即缩点后入度为 $0$ 的点仅一个。
问题转化:求至少包含一个 $\ge k$ 元强连通分量的竞赛图数量。
先考虑 $n$ 个点且包含 $n$ 元强连通分量的竞赛图数量 $f(n)$ ,设 $g(n)$ 表示任意竞赛图数量,枚举点集中最小点最小的强连通分量,然后关联的所有边起点只能是该点集:
$$g(n)=\sum_{i=1}^{n}f(i)g(n-i)(^n_i)$$
再次转化问题,设仅由 $<k$ 元强连通分量组成的竞赛图数量 $s(n)$ :
$$s(n)=\sum_{i=1}^{k-1}f(i)s(n-i)(^n_i)$$
答案是 $g(n)-s(n)$ 。然后变化一下式子,多项式求逆。
C
题意:给一棵树,代价轻边 $1$ ,重边 $\lceil \log_2^{l}+1 \rceil$ ,叶子代价为到根代价和。求叶子代价最大值最小是多少?
正解神仙贪心 + DP ,长链剖分可过 60 。
Orz
注意卡常,调整心态,信仰暴力能得分,就算 Subtask 什么的也要信仰。
03.31 [自闭 AGC030] [51nod 省选模拟 2019 第三轮]
AGC030 E
模型转化,红线蓝线,选一个匹配, $O(n)$ 计算当前答案,总共 $O(n^2)$ 。
AGC030 F
全 -1 时是 Catalan 数,推广, DP 。
[51nod] A.
**两个分母互素的分数之和为整数,这两个分数分别为整数。**如果明白了这一点,并且会写 Pollard Rho ,您就可以通过此题。
[51nod] B.
咕咕咕,神仙计数。
[51nod] C.
SBT 套 Trie ,可是我不明白 Trie 维护权值是什么意义,但据说这种操作是一种对给定区间排序的套路。
04.01 [长乐一中集训]
A. 遮天蔽日
计算几何,多边形重心。
B. 三元组
题意:求序列中 $A[l,mid],B[mid+1,r]$ 满足 $A,B$ 是回文串的所有情况的 $\sum l \times r$ 。
$Ans = \sum x_i y_{i+1}$ , $x_i$ 表示以 $i$ 结尾的回文串的左端点下标和, $y_i$ 表示以 $i$ 开头的回文串右端点下标和。 Manacher ,差分,前缀和。
C. 最优价值
最大权闭合子图。
Orz
又翻车了,再不提前打暴力我就 XX 。网络流模型以为套不上最大权,一直卡在最小割上了。主要是策略有问题,最后几十分钟一道题没做,竟然还不打暴力,企图搞出 C 题。
04.02 [HNOI 2018 省队集训 6-25] [Newcoder 2018 ACM]
A. gift
题意:定义序列 $A$ 变成到 $B$ 的代价为需要执行交换两个位置的数字这个操作至少进行的次数。给两个有空位的序列,求代价为 $[0,n-1]$ 的方案数。
神仙题。至少交换次数等于 $n-p$ ,其中 $p$ 为置换中循环节个数。如果两个序列都是给定的,那么问题就是求环的数量。
对于空位,分为三类连边:空位仅在左,仅在右,左右有。然后斯特林和容斥部分我还不太理解。
B. girl
题意:给出 $a,b,c,n$ ,求 $\sum_{0 \le i < j < k < n}ai+bj+ck$ ,满足 $i,j,k$ 中任取两个均不存在于给出的限制集合 ${(x,y)}$ 中。
没有限制,算下 $a,b,c$ 的系数就可以了,得到答案 $s$ 。
有限制,设 $x$ 表示至少满足 $i,j$ 存在于限制集合的三元组的贡献和,类似地,设出 $y,z$ ,答案为 $s-|x \cup y \cup z|$ ,容斥一下。
形如 $|x|,|x \cap y|$ 的部分比较容易求,考虑计算 $|x \cap y \cap z|$ ,即三元环的贡献。
根据 luogu 上的 post ,这个可以 $O(m \log m)$ 做。对于无向图,度数大的向度数小的定向,相等时根据标号随便定一下。
这样构造的是一个 DAG 。然后:
for (0 <= i < n) {
for (i -> j)
mark[j] = i;
for (i -> j)
for (j -> k)
if (mark[k] == i)
papapa
}
string
SAM + LCT 。
[Newcoder] The number of circuits
看一下 BEST Theorem ,暴力高斯消元算下答案,扔进 BM 里。
所以营养成分主要是 BEST Theorem 和复习高消。
04.04 [FJWC2019 DAY1]
全连
一开始粗略算了下数据范围以为要写高精,看了下时限以为要用一个 long long
和一个 int
模拟高精卡常。然而并不需要,两个限制,主席树会爆空间,所以每次并不直接加入状态,扔到堆里面,需要用到的时候再拿出来,在线段上上做对应修改。
原样输出
从后往前建立 SAM ,然后对于没有转移的点,连向上一个字符串的转移位置,得到一张 DAG ,拓扑排序算一下从起点出发的方案数。
不同的缩写
搜索 + 剪枝 + 二分图匹配。一个串如果有超过 $n$ 个子序列,一定可以完美匹配。
染色问题
题意: $n \times m$ 的棋盘, $c$ 种颜色。要求每行每列至少一个格子要染色,每种颜色至少出现一次,求方案数。
容斥一下,发现形如 $(-1)^i(^n_i)f(i)$ 的式子还可用二项式定理收起来, $O(n^2 \log n)$ 。
子集
题意:求数列 ${a}$ 所有子集中前 $k$ 大的数和的和,对所有 $i \in [1,n]$ 输出答案。
设从大到小排名为 $i$ 的数字为 $a_i$ ,所有子集中第 $k$ 大的数的和是 $c_k$ ,有:
$$c_k = \sum_{i=k}^{n} (^{i-1}_{k-1})2^{n-i}$$
可以得到一个 $c_k=\sum_{i=k}^{n} f_i g_{i-k}$ 的式子,卷积。
来源:oschina
链接:https://my.oschina.net/u/4412692/blog/3627541