【长更】一句话题解(组队训练的俄罗斯题、oj、camp)

  还是太长了,第二次分裂。。

  标 * 的为有价值的题,标 ^ 的为欺诈题,标 - 的为知识点待填坑,标 ? 的表示看别人是这样做的但是没懂为什么
  组队训练的题,如果是队友过的板刷题,题面又很长,就会标个“队友说是沙雕题”

Codeforces ( 主要是 gym )

300iq Contest 1

  每天起床第一句,300iq TXDE!
  *B:二分答案 m i d mid mid,小于等于 ⌊ m i d 2 ⌋ \lfloor \frac{mid}{2} \rfloor 2mid 的全部选上,任意两个选了的点之间最多再选一个点
  *C: a a a 数组先铺成 0 ∼ n − 1 0 \sim n-1 0n1,然后 b b b 数组二分一个 rank,比他大的全是 n n n,比他小的全是 − n -n n
  *D:从左到右贪心,维护一个 set 表示这里面的点全都放得下当前区间
  F:使白边连成森林即可

Bubble Cup 12

  D:每个环有 size 那么多种方案,加起来形成一个式子,然后很多个式子做 FWT
  E:解法一:暴力卡常冲过去
    解法二:分治 FFT
  F:队友说是沙雕题
  H:树上的点随便做,环上的点推推式子发现是在距离 m m m 以内寻找有多少个点的点权是给定值,大力主席树
  I:只有“第一列”选或不选两种情况

300iq Contest 2

  每天起床第一句,300iq TXDE!
  B:解法一:设 x x x 的最高位为 w w w,所有数按高 60 − w 60-w 60w 位分类,每一类最多选两个数,建个 trie 平行遍历
    解法二:所有数排序,则只需保证相邻的异或值 ≥ x \geq x x 即可,dp
  I:先找出重心,然后选择若干儿子使其 s i z e size size 之和 ∈ [ n 4 , 3 n 4 ] \in [\frac n4,\frac{3n}4] [4n,43n](必定存在),然后询问,就可以分治下去了,询问次数之和为 log ⁡ 4 3 n \log_{\frac 43} n log34n

2019-2020 Russia Team Open, High School Programming Contest (VKOSHP 19)

  AFI:队友说是沙雕题
  B: a a a 线段的端点沿 v ⃗ \vec{v} v 投影到 b b b 线段上
  C:计算出每一项的 ( a , b , c , n ) (a,b,c,n) (a,b,c,n),上 python 自带高精度判断是大于号还是小于号
  *D:如果 ( 1 , 1 ) → ( 1 , m 2 ) → ( n , m 2 ) → ( n , m ) (1,1) \to (1,\frac m2) \to (n,\frac m2) \to (n,m) (1,1)(1,2m)(n,2m)(n,m),那么中线一定有一个点被经过,这样就可以划分成两个部分平行递归下去了
  G:相邻的减号之间最多插入一个括号,这样就可以 dp 了
  H:从低位到高位一位一位构造,然后把多余的位清掉
  *L: x x x y y y 经过 c c c 等价于 d i s x , y = d i s x , c + d i s c , y dis_{x,y}=dis_{x,c}+dis_{c,y} disx,y=disx,c+disc,y k k k 棵树都有 x x x y y y 经过 c c c 等价于 ∑ d i s x , y = ∑ d i s x , c + ∑ d i s c , y \sum dis_{x,y}=\sum dis_{x,c}+\sum dis_{c,y} disx,y=disx,c+disc,y O ( n 2 k ) O(n^2k) O(n2k) 预处理距离,然后 O ( n 3 ) O(n^3) O(n3) 枚举
    看大题解

2020 UP ACM Algolympics Final Round

  D:略
  EK:队友说是沙雕题
  A:类似于最长公共子序列的 dp
  B:bfs
  C:拉格朗日条件极值
  L:用拉格朗日插值公式
  FGHIJM:

Ozon Tech Challenge 2020 (Div.1 + Div.2)

  A:两个数组都从小到大排序
  B:贪心
  ^C:考场解法:把所有数按   m o d     m \bmod~m mod m 分类,先假设都是正贡献算答案,再在原数组求要乘多少个 − 1 -1 1
    正常解法: n > m n>m n>m 时答案必为 0 0 0,所以直接暴力
  *D:每次询问一个三元组(设 a − b − c a-b-c abc,则询问 a , c a,c a,c),就可以去掉两棵子树
  *E:上界就是 1 ⋯ n 1\cdots n 1n,第 i i i 个数最多贡献 ⌊ i − 1 2 ⌋ \lfloor \frac{i-1}2\rfloor 2i1。所以先找到最大的 n ′ n' n 使得 1 ⋯ n ′ 1\cdots n' 1n 的贡献恰好小于等于 m m m,再凑后面的。
  FGH:

MEX Foundation Contest (supported by AIM Tech)

  FI:略
  **C:动态点分求重心
  *E: ∑ e min ⁡ { c e x , c e y } = ∑ k = 0 s ∑ e [ c e x ≥ k ∧ c e y ≥ k ] \sum_e \min\{c_{e_x},c_{e_y}\}=\sum_{k=0}^s\sum_e[c_{e_x} \ge k \land c_{e_y} \ge k] emin{ cex,cey}=k=0se[cexkceyk],于是状压 dp,设 f s , i f_{s,i} fs,i 表示已经分配了 i i i 个 token, s s s 这个集合还继续参与分配,的最优答案。
  *G:状压 dp,对于一个集合 s s s,假设它染红色,那么必存在一个结点,所有包含它的子集都是红色,于是 s s s 去掉这个结点就成了子问题了
  *H:二分, 0 ∼ m i d − 1 0 \sim mid-1 0mid1 每种权值的边至少选一条,选出来的边必须互相具有拓扑关系,这就成了个 2-sat。把 2-sat 写成暴力 dfs 也是能过的
  ABDJ:

2018-2019 CTU Open Contest

  AC:略
  B:队友说是沙雕题
  D:AC 自动机解方程
  E:建 SA,每个位置由其前 k k k 个位置的最小 r a n k rank rank 来覆盖
  F:数位 dp
  G:dp,设 f a , b , c , d f_{a,b,c,d} fa,b,c,d 表示先手在 ( a , b ) (a,b) (a,b),后手在 ( c , d ) (c,d) (c,d),先手胜的概率。无视循环转移迭代 1000 次
  H:SG 随便搞搞
  *I:“不能重叠”等价于“总面积最小”,每次取最左下角的点,用这个点取一个最小正方形
  J:按位考虑,每一位相当于数每个连通块的点数

Radewoosh+mnbvmar Contest

  A:shuffle 一个区间就是把这个区间所有数变成平均值
  *C:二分,第一次找中间竖线的最大值,然后往周围最大的方向走,第二次找横线最大值,依此类推
  E:精细地实现 O ( k 2 n 2 ) O(k^2n^2) O(k2n2) 的 dp,在数据随机的情况下复杂度会变成 O ( k 2 n + k n 2 ) O(k^2n+kn^2) O(k2n+kn2)
  G:“010”和“101”会把序列割成若干段,预处理 S G l e n , s SG_{len,s} SGlen,s 表示长度为 l e n len len、序列状压为 s s s(记 111 为 1 1 1,110 为 0 0 0)的序列的 S G SG SG
  H:Dijkstra 的顺序倒着 dp,更新别人 dp 值可以 O ( 1 ) O(1) O(1) 实现
  J:有解的充要条件是存在两个形如“左下-右上”的结构,且一个能到达另一个
  *-K:解法一:LCT+SAM
    解法二:依据 border 划分成 log ⁡ \log log 个等差数列
  

2018-2019 Summer Petrozavodsk Camp, Oleksandr Kulkov Contest 2

  (以下题号按 statement 来标,但 statement 里的 GHI 对应 codeforces 上的 HIJ)
  *B:枚举 gcd ⁡ \gcd gcd,将 b b b 排序,二分答案,枚举 a i a_i ai,相当于问 b b b 的一段前缀是否有 gcd ⁡ ( i , j ) = 1 \gcd(i,j)=1 gcd(i,j)=1,简单反演一下, O ( n log ⁡ 3 n ) O(n \log^3 n) O(nlog3n)
  C:贪心,每次没钱了就找前面最花钱的项目删除
  ?D: N ≥ 799039879 N \ge 799039879 N799039879 答案就是 2 N − 799039877 2^{N-799039877} 2N799039877,然后 < 799039879 <799039879 <799039879 就分段打表
  *E:这是五边形数公式里让 x = 0.1 x=0.1 x=0.1
  G:(队友做的物理题我物理不及格就不插手了)
  *I:对于当前的根 r o o t root root,它的若干儿子 x 1 , ⋯   , x m x_1,\cdots,x_m x1,,xm 同构,那么就构造 m − 1 m-1 m1 个置换表示子树 x 1 x_1 x1 与子树 x 2 x_2 x2 互换、子树 x 1 x_1 x1 与子树 x 3 x_3 x3 互换……,然后递归 x 1 x_1 x1 换根
  ADFH:

2018-2019 9th BSUIR Open Programming Championship. Semifinal

  AF:队友说是沙雕题
  B:2-sat
  *C:dp,设 f i , j , k f_{i,j,k} fi,j,k 表示第 i i i 个数到第 j j j 个数考虑后 k k k 位,的贡献和。(可能还要再加一维表示当前这位选到了什么数)
  E:比较麻烦的讨论题,可以枚举第一个数字的位数,注意判断 1 0 18 10^{18} 1018
  ^G: n ≥ 31 n \ge 31 n31 之后循环节为 4 4 4
  H: 1 0 18 10^{18} 1018 范围内只要不含 1 , 2 , 3 , 5 , 8 1,2,3,5,8 1,2,3,5,8 就行
  *I:每个左端点往有 O ( log ⁡ ) O(\log) O(log) 段,每个右端点往左也是,线段树随便搞搞
  J:每个人 21 种状态,枚举第一个人是什么状态
  K:算每条边的贡献,树链剖分,线段树暴力
  *L:枚举最大和 s u m sum sum,那么 2 n 2n 2n s u m − 2 n sum-2n sum2n 种选择, 2 n − 1 2n-1 2n1 除去 2 n 2n 2n 选掉的后还是 s u m − 2 n sum-2n sum2n 种选择……往下一段都是 s u m − 2 n sum-2n sum2n 种选择,这部分贡献是 [ x ] ∏ ( ( s u m − 2 n − 1 ) + x ) [x]\prod \big((sum-2n-1)+x\big) [x]((sum2n1)+x),剩下的贡献就阶乘除一除
  D:

2018-2019 9th BSUIR Open Programming Championship. Final

  H:略
  A:区间 dp,设 f l , r f_{l,r} fl,r 表示区间 [ l , r ] [l,r] [l,r] 的答案,如果两头都是字母那么就是 f l + 1 , r − 1 f_{l+1,r-1} fl+1,r1,否则枚举星号匹配了多少长度
  *C:答案一定是 2 的幂,枚举答案(最多 log ⁡ \log log 次),算出最终矩阵并判断
    看大题解
  D:牌从小到大排序然后 dp
  E:FWT
  F:枚举两个二进制位算贡献(注意常数,不要在 O ( n log ⁡ 2 a ) O(n \log ^2 a) O(nlog2a) 的循环里取模)
  I:记忆化搜索
  *J:分块,预处理块内答案和任意两块之间的答案
  BGK:

2019-2020 Saint-Petersburg Open High School Programming Contest (SpbKOSHP 19)

  ABCH:队友说是沙雕题
  *E:考虑把 n n n 个数当成 n n n 个二进制位, + 1 +1 +1 放正数, − 1 -1 1 放负数, 0 0 0 的位放最前面
  F:floyd 或者大讨论
  G:meet in the middle
  I: n > 4 n>4 n>4 时三元组之间会连成一个环,直接把这个环做出来
  *J:递推,每次对于一个排列,找到最大值的位置,把它前面的元素放后面,删掉最大值,这就递归下去了,推一推转移式子
  K:奇偶分组,每组用 LCT 解决
  D:

2017-2018 8th BSUIR Open Programming Contest. Final

  EH:队友说是沙雕题
  B:暴力
  C:对于左边更大和右边更大两种情况分别二分
  *F:先对于所有 01 串( 0 0 0 表示小数, 1 1 1 表示大数)过一次排序网络看看合不合法,再根据合法的 01 串 dp 出合法的排列数量
  G: 1 + l c m ( n − 1 , m − 1 ) − ( 重 复 经 过 的 格 子 数 ) 1+lcm(n-1,m-1)-(重复经过的格子数) 1+lcm(n1,m1)(),重复经过的格子数可以画一下图观察一下
  H:
  *I:扫描右端点,合法的左端点区间(有 1 1 1、不含重复数字)是滑窗向右的,树状数组维护桶
  J:枚举首项以及 N N N 是第几项
  ADK:

2017-2018 8th BSUIR Open Programming Contest. Semifinal

  ABFHJ:略
  K:队友说是沙雕题
  C:维护线性基
  *D:不考虑 L L L 连向第一排、 R R R 连向最后一排,那么合法的方案跟不合法的方案是成对存在的,直接总方案数除以 2 2 2
    看大题解
  E:每种质数单独考虑,随便 dp 一下
  *G:等价于 ∑ i = 0 k − 1 ( ( a + b i )   m o d   m )   m o d   9 \sum_{i=0}^{k-1} ((a+bi) \bmod m) \bmod 9 i=0k1((a+bi)modm)mod9,把   m o d     m \bmod~m mod m 拆成整除的形式然后类欧
    看大题解
  ?I: O ( n 3 ) O(n^3) O(n3) 枚举钝角三角形暴力判(钝角三角形的数量是有限的,只要精细地实现程序,使得每次枚举都是一个钝角三角形)

2016-2017 7th BSUIR Open Programming Contest. Final

  A:队友说是沙雕题
  B:第 i i i 行就放 [ ( i − 1 ) n + 1 , i n ] [(i-1)n+1,in] [(i1)n+1,in] 就好了,保持每行的相对顺序一致、行内满足不相邻的条件即可
  *C:SG 值是分段的,每次除以 2 2 2 或除以 9 9 9 得到上一段的左端点
  E:GDOI2015粗心的邮差 状压 dp,设 f i , s f_{i,s} fi,s 表示考虑了前 i i i 个数,第 i i i 个数前后 k k k 项是否被分配记为 s s s,的方案数。 k k k n n n 大的时候用矩阵乘法
  F:枚举一个 swap 的点,预处理其左右的最大子段,以及最大子段+剩余元素最大值
  G:设从低位到高位考虑到了第 i i i 位(总共考虑 n n n 位),当前的数是 c u r cur cur,若 c u r cur cur 的第 i i i 位为 1 1 1,则放 1 1 1,否则放 2 2 2
  H:dp
  I: 1 , 2 , 1 , 2 , ⋯ 1,2,1,2,\cdots 1,2,1,2, 这样放,也就是考虑 s   m o d   3 s \bmod 3 smod3 就行了
  DJ:

2015-2016 6th BSUIR Open Programming Contest. Final

  DEH:队友说是沙雕题
  A:数位 dp
  C:每个数暴力枚举它跟前面共有什么质数
  *F:解法一:圆方树+树形 dp 分类讨论圆点和方点
    解法二:dfs树+树形 dp 特殊考虑返祖边
  G:注意到只跟行、列各翻转了多少次有关,若 n 2 n^2 n2 较小,则暴力枚举行、列各翻转了多少次,否则 n t nt nt 比较小,对每个询问枚举行翻了多少次
  *I:最优一定是 4000 ⋯ 000 − 000 ⋯ 000 4000\cdots000-000\cdots000 4000000000000,所以一开始扔个 4 4 4,收到 4 4 4 以后放 ( 1 , 1 ) (1,1) (1,1)
  BJ:

2015-2016 6th BSUIR Open Programming Contest. Semifinal

  EFI:略
  BH:队友说是沙雕题
  A:枚举 gcd ⁡ \gcd gcd,把 b i b_i bi 是它倍数的位置拉出来,求上升子序列数量,然后容斥
  C:meet in the middle
  ^D:把它看成一个四位数,维护一个可选集合,每次从里面随机一个出来问
  G:找规律
  K:bzoj5016 拆成前缀询问,莫队
  J:

2014-2015 V BSUIR Open Programming Championship

  EF:队友说是沙雕题
  *A:用 p p p 进制考虑,问题最后转化成:有 n n n 堆石子,我从一堆拿走一个后,对面要么再选择一堆拿一个,要么从后面的堆拿一个填上我的位置。结论是当石子总数为奇数时先手必胜
  B:排序后暴力
  C:不停地给 n n n 开根号
  ^D:有通式的,写个暴力就找到通式了,比如 2 , 3 , 4 , 5 , 7 , 6 , 8 , 9 , 10 , 13 , 12 , 11 2,3,4,5,7,6,8,9,10,13,12,11 2,3,4,5,7,6,8,9,10,13,12,11
  G:树形dp
  J:答案等于最小的 最 远 点 对 2 \frac{最远点对}{2} 2
  K:dp,设 f n , m f_{n,m} fn,m 表示还剩 n n n m m m 黑的最大期望收益
  HI:

2013-2014 BSUIR Open Programming Championship. Final

  完结撒花
  BD:队友说是沙雕题
  A:这题的考点是如何不爆 long long。两者同号用减法,异号用加法。(当然 0202 年了直接 __int128 或者 python 完事了)
  C:SA 随便搞搞
  F:每个数按最低位分类,每一类从大到小贪心,注意特殊考虑 0 0 0
  H:直接从左到右贪心
  I:有一点点繁琐的树形 dp
  J:枚举 1 1 1 的个数,然后数位 dp
  K:推式子,枚举 X X X 算答案
  E:

AGM 2020, Final Round, Day 1

  D:队友说是沙雕题
  *B:扫描右端点,维护左端点的答案,用单调栈维护最值,用线段树维护最小值的异或和、最大值的异或和、最小值 ∨ \lor 最大值的异或和
  E:扫描线
  F:贪心模拟最小割
  H: n , m , k n,m,k n,m,k 恰有一个是奇数的时候,只有一个格子走不到,否则全都走得到
  I:最大获利
  *K:圆邻域当成方邻域来做,邻居数量是同阶的。剩下的就是个简单 MST
  ACGJL:

AGM 2020, Final Round, Day 2

  CDHJ:队友说是沙雕题
  A:最长反链=最小链覆盖,传递闭包+二分图最大匹配
  *E:点分 FFT 求出每种长度的路径有多少,然后 FFT 算答案
  G:启发式合并,或者 dsu on tree
  I:广义圆方树+虚树 dp
  BEKL:

AGM 2020, Qualification Round

  CDI:队友说是沙雕题
  A:网络流
  B:贪心逐位确定,每次相当于问以 x x x 为根 y y y 子树的大小
  E:注意到 a i a_i ai 很小,枚举 a i a_i ai a j a_j aj 的值,然后让两数的差的绝对值尽量小
  ^F:每次排序长度为 2 是最优的,因此等价于求逆序对
  G:250 行的打牌题
  H:按 e i e_i ei 从小到大排序,设 s i s_i si 表示吃到第 i i i 颗糖所需要吃掉的集合,则 s i = s i − 1 ∪ { i 的 后 继 } s_i=s_{i-1}\cup\{i的后继\} si=si1{ i},最后 ∀ i , e i ≥ ∣ s i ∣ \forall i, e_i \ge |s_i| i,eisi 即表示合法。因此每个点会从他前驱中最小的 e i e_i ei 开始做贡献,反向图拓扑+扫描线
  J:维护 O ( n 2 ) O(n^2) O(n2) 个线段树
  K:dominator tree 模板题
  -L:top tree

2019 USP Try-outs

  BH:略
  FG:队友说是沙雕题
  *A:分成 m > 5 ⋅ 1 0 4 m>\sqrt{5 \cdot 10^4} m>5104 m ≤ 5 ⋅ 1 0 4 m \le \sqrt{5 \cdot 10^4} m5104 两类
  *C:用 set 维护当前的集合,每次询问 i d id id,从最小的元素开始贪心选尽可能多的能装在 i d id id 里的,然后再从 i d id id 往后贪心选尽可能多的
  -D:treap
  I:以 b b b 为第一关键字、 a − b a-b ab 为第二关键字从小到大排序,是最优的
  J:最小圆覆盖
  K:从小到大排序,若发现存在某个位置 x x x 使得 ∑ i = 1 x p i < p x + 1 − 1 \sum_{i=1}^x p_ii=1xpi<px+11,那么答案就是 ( ∑ i = 1 x p i ) + 1 \big(\sum_{i=1}^x p_i\big)+1 (i=1xpi)+1
  E:

Opentrain

Petrozavodsk Summer-2013. Moscow IPT Contest

  E:略
  *A:它是个分层图,每个点 hash 一个出点集,bfs 来定层,每个点的出点按照该 hash 值分为左右两边
  C:大力余弦正弦推式子
  *F:每列看成是连边,每个连通块如果没有奇环那么就是有一个自由变元,如果有奇环就没有自由变元, r a n k = n − rank=n- rank=n自由变元
  I:按二进制 1 1 1 的数量的奇偶性分为两个集合,可证 k < n kk<n 时一定可行
  *J:点分+FFT,注意常数
  K:线段树维护 ∑ a \sum a a ∑ b \sum b b ∑ a ⋅ b \sum a\cdot b ab,以及 a a a b b b 的加法标记

Petrozavodsk Winter-2014. Warsaw U Contest

  BH:略
  A:暴力 bitset,设 b i , j b_{i,j} bi,j 表示第 i i i 位不是 j j j 的有谁
  E:任一自然数能被不超过 3 个形如 n ( n + 1 ) 2 \frac{n(n+1)}2 2n(n+1) 的数的和表示
  *F:做法一:询问拆成 4 个二维前缀的形式,然后对 x 轴 cdq,时间 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n)
    做法二:询问拆成 4 个二维前缀的形式,然后对于每个小询问,矩形只会有被全包含、踩上边界、踩右边界、踩右上顶点四种情况,最后一种最多只有一个矩形,其余三种可以简单维护,时间 O ( n log ⁡ n ) O(n \log n) O(nlogn)
  *I:对于一棵树,每次贪心找 d e e p i + a i deep_i+a_i deepi+ai 最大的点(因为这个是瓶颈),然后处理掉那棵子树
  *J:每一个 N 开头的后缀都是一个独立的游戏(除了开头其他全是 S),比如 NSNNS,则看作是 NSSSS、NSS、NS 三个独立游戏,暴力算 S G SG SG,时间 O ( n 2 log ⁡ n ) O(n^2 \log n) O(n2logn)

Petrozavodsk Summer-2013. Gennady Korotkevich Contest 1

  *A:解法一:SA,对于 SA 的每一项,出现次数向上找,那么: h e i g h t height height 以外的出现次数为 1 1 1,二分最大合法长度就行了; h e i g h t height height 以内的去掉被覆盖过的,总量是 O ( n ) O(n) O(n)
    解法二:SAM,每个节点的出现次数、长度区间都是在建树时维护好的,那么每个节点二分一个最长的合法长度就行了
  B:枚举分界点
  C:枚举加起来等于 10 的组合,然后 O ( n 2 ) O(n^2) O(n2) dp,注意末位 0 的情况
  *E:解扩展 gcd 得到裴蜀系数,可以通过裴蜀系数来推答案的式子
  G:要求的是最长的子序列使得拼起来后是排完序的数组中的连续一段。考虑排序后分成若干段相同的数,取 1 段则全取,取 2 段可以在原序列上 O ( n ) O(n) O(n),取大于等于 3 段时中间的段是要全取完的
  H:队友说是沙雕题
  J:余数也是 n n n 的约数,因此直接枚举 n n n 的约数,假设是 d d d,则把 d d d 当作余数的贡献为 n − d d \frac{n-d}d dnd 的大于 1 1 1 的约数个数,暴力

XV Open Cup named after E.V. Pankratiev Grand Prix of Siberia

  12:略
  2:队友说是沙雕题
  3:解法一:暴力枚举 k k k,双 hash 判(不知道为什么我们的单 hash 被卡掉了。。
  4:FWT
  5:分层最短路
  7:棋盘黑白染色,跑最大流
  8:搞个堆,一开始有 O ( n 2 ) O(n^2) O(n2) 条边在里面,每次合并两个集合之后往堆里加 O ( n ) O(n) O(n) 条边,因此堆总量是 O ( n 2 ) O(n^2) O(n2)
  *10:等角螺线公式+弧长积分

Petrozavodsk Winter Training Camp 2018 Day 2: ITMO U 1 Contest

  *A:大力积分
  C:先取 1 3 \frac 13 31,他剩下的这块 2 3 \frac 23 32 不动(假设先扔掉),然后大家都取对方最大的 2 3 \frac 23 32,最后我至少剩 1 9 \frac 19 91,再取他一开始那个 2 3 \frac 23 32 2 3 \frac 23 32 就够了
  D:第 i i i 轮的贡献就是 ( n − k 2 i − 1 − 1 ) ( 2 n − 1 2 i − 1 − 1 ) \frac{\binom{n-k}{2^{i-1}-1}}{\binom{2^{n}-1}{2^{i-1}-1}} (2i112n1)(2i11nk)
  *E:题意坑 递推求答案,算 n ! !  mod  2 64 n!!~\text{mod}~2^{64} n!! mod 264 有科技。
    看大题解
  G:队友说是沙雕题
  ^H:考虑最终结构, p i p_i pi p j p_j pj 连边,会构成一棵树。因此逐位确定跑最小树形图就好了
  **I:对于每个 i i i,给 a i a_{i} ai 加上一个随机的 y i y_i yi,给 a p i a_{p_i} api 减去 y i y_i yi。然后读入的数组反过来,跟 a a a 数组做卷积, 0 0 0 就表示合法位置
    看大题解
  J:设 f i f_i fi 表示方案数, a i > n a_i > \sqrt n ai>n 时直接跳着转移, a i ≤ n a_i \leq \sqrt n ain 时按 i  mod  a i i~\text{mod}~a_i i mod ai 维护一下,避免计重如果跳到相同的格子要停下来

XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Gomel

  A:易证 a × h = n a \times h=n a×h=n
  B:模型转化为有很多物品,第 i i i 种物品价格为 i i i,数量为 log ⁡ 2 lowbit ( i ) + 1 \log_2\text{lowbit}(i)+1 log2lowbit(i)+1,求 n n n 元能买多少物品。二分买到第几种物品就好了
  F:先 p − 1 p-1 p1 个人每人都是 { i , p } \{i,p\} { i,p},然后两个人都是 { p } \{p\} { p},然后 p − 2 p-2 p2 组人,第 i i i 组人分别是 { i + 1 } , { i + 2 } , ⋯   , { p − 1 } \{i+1\},\{i+2\},\cdots,\{p-1\} { i+1},{ i+2},,{ p1}
  *G:枚举斜率 k k k,相当于每个人有一个限制区间 [ l i + i k , r i + i k ] [l_i+ik,r_i+ik] [li+ik,ri+ik] 求区间交的整点数。随着 k k k 的递增, f ( k ) = max ⁡ i = 1 n { l i + i k } f(k)=\max_{i=1}^n\{l_i+ik\} f(k)=maxi=1n{ li+ik} 形成一个下凸壳, g ( k ) = min ⁡ i = 1 n { r i + i k } g(k)=\min_{i=1}^n\{r_i+ik\} g(k)=mini=1n{ ri+ik} 形成一个上凸壳,因此可以求凸包内整点数
  J:队友说是沙雕结论一行题
  K:只有 15 15 15 种质因子,每种质因子都必须要有人全有、有人全无。 O ( 3 15 ) O(3^{15}) O(315) 大力容斥

XIV Open Cup named after E.V. Pankratiev. GP of SPb.

  AB:略
  C: O ( n 4 k ) O(n^4k) O(n4k) dp
  E:dp,写好一点做到质数个数平方就行了
  F:方法一:推出恰好撞 i i i 个的概率,是个组合数式子,数太大了就先取 ln ⁡ \ln ln 后面再 exp ⁡ \exp exp
    方法二: a n s = ⌊ L M N ⌋ ans=\lfloor \frac{LM}N \rfloor ans=NLM
  G:最小费用可行流,费用是一个 10 维向量
  *H:方法一:每个点维护一个 bitset 表示可达性,每次操作暴力重构 v v v 的 bitset,然后按拓扑序更新能到 v v v 的点的 bitset,时间 O ( q n 3 64 ) O(\frac{qn^3}{64}) O(64qn3)
    方法二:把 bitset 换成方案数,时间 O ( q n 2 ) O(qn^2) O(qn2)
    看大题解
  J:每次往上叠一定不会打结
  K:等价于做两次消元之后最多有多少全 0 0 0 向量。枚举第一个向量,给别人消元;然后看有多少向量全 0 0 0 了,以及最多有多少一样的向量

XVII Open Cup named after E.V. Pankratiev. Grand Prix of Europe (CEPC-2016)

  A:大模拟
  *B:一个点集合法等价于左右各有完美匹配。先左右各用 Holl 定理算出合法的集合,然后双指针算答案
  C:找到左右第一个高度为 1 1 1 的图形就好算了
  *D:设当前在 ( x , y ) (x,y) (x,y) 有长度在 [ a , b ] [a,b] [a,b] 之间的柱子要排序,则把他们按容量分摊到右下矩形的每一个点,递归下去
    看大题解
  F:一个点如果他父亲要变就给他和新父亲都打标记,一条链从最深的标记开始向上全都要拆掉
  *H:先预处理出每个点作为中心的最大边长,这个可以 O ( n 2 ) O(n^2) O(n2) dp。然后从大到小激活每个点,每个询问相当于询问两点最早什么时候连通,整体二分或者并查集启发式合并
  J:每种点对拿出来,先 A B A ABA ABA B A B BAB BAB、先 B A B BAB BAB A B A ABA ABA 这两种策略必有一种是最优的
  K:考虑差分序列,奇数项和偶数项分开, 00 00 00 一次消掉, 010 010 010 两次消掉
  *L:常值变量单独判掉,然后合并本质相同的变量(两个变量相等或相反),最后一定是剩下两个变量
    看大题解

ByteDance 2020 Online Selection

  M:略
  A:
  C:二分+圆交(面积交大于 0,或者每个交点都判一下合不合法)
  *D:黑白染色,最后黑白颜色数量之差就是无法被覆盖的格子数
  *E:dp,枚举 i i i,每个出现过的数字最后两次出现的位置假设为 x x x y y y,把 x + 1 x+1 x+1 y y y 连一条线段,那么线段并就是可以做贡献的位置,位置 j j j 的贡献是 f j − 1 f_{j-1} fj1,线段树实现。
  *J:树形 dp,设 f i , 0 / 1 , j f_{i,0/1,j} fi,0/1,j 表示 i i i 号点,它连向父亲的边选 0 0 0 或是选 1 1 1,最紧的限制还有 j j j 的距离,的方案数。如果它选 0 0 0,意味着它只用考虑 1 1 1 的限制了,那么儿子里 1 1 1 的限制转移上来, 0 0 0 就没了。选 1 1 1 同理。
  K: 1 1 1 k k k 的逆序对要算进答案里,接下来大于 k k k 的数字枚举一个分界线,分界线左边的放左边,右边的放右边
  K 加强(Cf Round 609):加个线段树维护一下分界线的枚举
  L:队友说是沙雕题

Moscow Pre-Finals Workshop 2016. National Taiwan U Selection

  A:解法一:线段树维护矩阵
    解法二:预处理出每个位置往后 2 k 2^k 2k 个 easy 在哪,每次询问倍增
  B:每一位分为 0 0 0 1 1 1 两个集合,每个集合单独做再连一条边。这相当于 trie 树上先递归处理子树然后启发式合并
  *D:非凸包上的点数,如果是奇数则先手必败,是偶数则先手必胜。
    看大题解
  F:找循环节
  *H:设 f i f_i fi 表示某长度下哈希值为 i i i 的方案数。两个字符串拼起来, f f f 数组相当于循环卷积。因此这题 FFT+快速幂。
  I:数位 dp
  ^J:每个数组取最大的 5000 个数暴力

Moscow Pre-Finals Workshop 2016. Kent Nikaido Contest 1

  J:略
  **A:观察对角线,正的图案是 ( 2 , 2 ) (2,2) (2,2),反的图案是 ( 1 , 1 , 1 , 1 ) (1,1,1,1) (1,1,1,1)
    看大题解
  *B: l = 1 l=1 l=1 k n k^n kn l = n l=n l=n 是 polya,其余的打表可以观察出规律。证明见题解
  *D:答案一定是所有边的边权和加上奇点两两配对的最短路,而最短路一定在 MST 上,因此树形 dp 配对奇点。
  H:算底层每个点的贡献,相当于算 ( L , j , k ) (L,j,k) (L,j,k) ( 1 , 1 , 1 ) (1,1,1) (1,1,1) 的方案数,等于 ( L − 1 k − 1 ) ⋅ ( L − k j − k ) \binom{L-1}{k-1} \cdot \binom{L-k}{j-k} (k1L1)(jkLk),用 Lucas 定理算奇偶性
  *I:固定形状杨表填数(该形状可以分为三个子矩形),钩长公式
  K:记最小值为 f i r s t first first,其他堆减去最小值的和为 r e s res res,当 n − 1 n-1 n1 为偶数时取决于 f i r s t + r e s first+res first+res 的奇偶性,当 n − 1 n-1 n1 为奇数时先手必胜当且仅当 f i r s t first first r e s res res 为奇数。

Urozero Autumn 2016. BAPC 2016

  BI:队友说是沙雕题
  C:bfs
  D:从某艘船开始卡一定是卡一整段,预处理每艘船开始卡会卡到哪里,以及相关时间。然后 d p i dp_i dpi 表示前 i i i 艘船全部过完的答案,转移就枚举从 i i i 开始卡,卡完之后等到第 j j j 艘船过了再下桥。
  E:二分+最短路
  G:转成切比雪夫距离的坐标,然后 O ( n 2 ) O(n^2) O(n2) 暴力
  H:dp,设 d p i dp_i dpi 表示 i i i 最少分成多少个数乘起来。在 n n n 的约数的倍数关系图上转移,倍数关系只有 3e6 个
  J:二分+二分图匹配
  K:先进行链上的递推,再枚举开头的空白
  L:枚举 i i i,选 a i , a i + 1 a_i,a_{i+1} ai,ai+1,再找一个 ∈ ( a i + 1 , a i + a i + 1 ) \in (a_{i+1},a_i+a_{i+1}) (ai+1,ai+ai+1)
  AF:

Urozero Autumn 2016. UKIEPC 2016

  FHI:略
  AE:队友说是沙雕题
  C:只用两个寄存器,栈只用来做加法,bfs,最多 38 步
  D:最小割
  G:到达时间模 2 t 2t 2t,然后人是分段的,枚举起点破环为链,dp,斜率优化
  J:每个龙鸣农民只会给一种豆子。 2 B 2^B 2B 枚举从农民得到的豆子集,判断是不是跟每个农民都有交
  L:错排写成 ∑ 1 i ! \sum \frac{1}{i!} i!1 的形式, i i i 大的时候就没影响了
  BK:

NCPC 2017

  GJ:略
  A:dp,设 f i f_i fi 表示前 i i i 个关键点的时间,若不买咖啡则转移到 i + 1 i+1 i+1,若买咖啡则转移到咖啡范围内的最后一个关键点或咖啡范围外的第一个关键点
  B:队友说是沙雕题
  C:循环链表
  *D:把 0 0 0 2 k − 1 2^k-1 2k1 视为结点,两个结点如果差一位则连一条边,那么就是个多源 bfs
  E:从深到浅激活每一个格子,用并查集维护连通性并记录集合最小值,当与抽水机连通时该最小值就是该集合的贡献
  *F:所涉及的范围是,首先一路往最左走,然后有 O ( 30 ) O(30) O(30) 层(以树为层),随(xie)便(dao)搞(ni)搞(tu)
  I:每个点 x x x 建一个汇点 x ′ x' x,连边 ( x , y ) (x,y) (x,y) 的时候多连一条 ( x , y ′ ) (x,y') (x,y),然后从每个点出发跑 bfs 到自己的汇点,最小值就是最小环
  K:二分,然后从速度要求最小的船开始满足
  H:

XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Korea

  A:扫描线,“回”字分上下左右四个矩形,一起走
  C:每条路径按桥的沉没概率从大到小做。设路径的成功概率为
  D:从小到大枚举 i i i,设 l a s t last last i − 1 i-1 i1 是从哪里复制的(没有的话就是 0 0 0),那么 l a s t last last 就转移到 n e x t [ l a s t ] [ s i ] next[last][s_i] next[last][si] 0 0 0
  *G:解法一:先做一个初始 MST,然后暴力 LCT
    解法二:先做一个初始 MST。对于每个点,将它及它相邻的点拿出来建虚树(虚树边权为 MST 链上的最大值),那么这个点的答案类似于虚树重新做 Kruscal
    看大题解
  F:当有根树状压 dp
  *J:大部分 [ l , r ] [l,r] [l,r] 的答案等于 [ l + 1 , r − 1 ] [l+1,r-1] [l+1,r1] 的答案,于是就这样往里缩,缩到能 O ( 1 ) O(1) O(1) 计算答案为止。
    看大题解
  BEHIK:

XVI Open Cup named after E.V. Pankratiev. GP of Europe (CEPC-2015)

  AH:略
  ^D:只有前缀   m o d     m = 0 \bmod~m=0 mod m=0 的位置才能够作为某段的结束位置,因此是 2 前 缀 为 0 的 位 置 数 量 2^{前缀为 0 的位置数量} 20
  F:FFT
  I:注意到坐标范围非常小,且半径 < 1 <1 <1。竖线直接枚举 j ∈ [ y 1 , y 2 ] j \in [y_1,y_2] j[y1,y2],否则假设线段从左下到右上,对 ∀ i ∈ [ x 1 , x 2 ] \forall i \in[x_1,x_2] i[x1,x2] 枚举 j ∈ [ ⌊ y ( i − 1 ) ⌋ , ⌈ y ( i + 1 ) ⌉ ] j \in [\lfloor y(i-1) \rfloor,\lceil y(i+1) \rceil] j[y(i1),y(i+1)] 判断
  J:最小割树
  K:挑出必选的和必不选的,剩下的形成偶环,选其中一边
  BCEGL:

Petrozavodsk Summer-2016. Warsaw U Contest, XVI Open Cup Onsite

  DG:队友说是沙雕题
  B:smart 染色相当于给出了独立集划分,那么如果一个独立集里有一种颜色只出现一次,则整个独立集都换那种颜色,如果造成了别的颜色只剩一种那么就 bfs 一样接着处理其他独立集
  E:总数减去不合法,不合法的是滑窗的矩阵乘法
  *H:一开始按 a i a_i ai 升序排序,则无论如何修剪都是保持单调递增的。所以可以每次二分出要修剪的后缀,然后线段树维护相关的东西
  J:枚举直角顶点,其他点按极角序 two pointers

XVII Open Cup named after E.V. Pankratiev. Grand Prix of Japan

  *B:行和列对应二分图两排点,原图有完美匹配等价于二分图每个连通块都是偶数条边,所以相当于二分图找割边
  DE:队友说是沙雕题
  H:求每个位置的 SG(滑窗 mex,用值域线段树维护最晚出现位置的最小值),然后 a i a_i ai 为奇数的位置异或起来
  J:跟这个题类似的 dp

Grodno 2015 (Urozero May 2015 Day 5)

  数学场,听说你会数学?
  IG:略
  *B:dp 枚举正贡献的数的和,假设正贡献为 x x x,负贡献为 y y y,则合法的充要条件为 x ≥ y x \geq y xy 且正贡献的最大值 ≥ x − y \geq x-y xy
  CF:队友说是沙雕题
  H:式子是组合数,Lucas+分块打表
  K:问题转化为能否将 A A A 拆成若干正整数的和,使得其平方和等于 A 2 − T A^2-T A2T 300 300 300 的整数拆分只有 1e7,直接暴力

Petrozavodsk Summer-2017. Warsaw U Contest, XVII OpenCup Onsite

  DK:队友说是沙雕题
  *A:对于一个点,把它在每种颜色下的并查集根写下来做成哈希,那么哈希值相同的点对就是合法点对。每种颜色启发式合并
  *C:连续段最多只有 2 m 2m 2m 段,区间 dp,每个区间第一步只会选择端点的颜色,且端点必须是其颜色的左右端点
  *E:解法一:KKT 条件
    解法二:设 g i 2 = p i g_i^2=p_i gi2=pi 这样就能隐含 0 ≤ p i ≤ 1 0 \leq p_i \leq 1 0pi1 了,然后正常的拉格朗日求条件极值
  G:设当前区间 [ l , r ] [l,r] [l,r] 要分成一个上升子序列和一个下降子序列,找到最小值所在位置 m i d mid mid(要么是上升的开始,要么是下降的结束),讨论分治 [ l , m i d − 1 ] [l,mid-1] [l,mid1] [ m i d + 1 , r ] [mid+1,r] [mid+1,r] 中的一段。
  H:莫比乌斯反演
  J:时间离散化,然后网络流

Makoto Soejima Contest 3 (MIPT Workshop Open 2)

  欺诈题大作战
  *A:贪心模拟最小割
  B:记 l a s t i last_i lasti 表示 i i i 后面第一个不是 s \text{s} s 的字符,先从前往后删 l a s t i < s last_i<\text{s} lasti<s 的,再从后往前删 l a s t i > s last_i>\text{s} lasti>s
  C:状压 dp,设 f s f_s fs 表示 prefer list 做到某一项后, s s s 这个月份集的食物已经被确定了。从小到大枚举 s s s,然后枚举 prefer list 的下一项 i i i i i i 的出现月份必须不是 s s s 的子集才有意义
  ^D:每个 T T T 对应的 S S S 的数量是一样的,算出来(考虑每个 t i t_i ti 前插入一堆 t i ‾ \overline{t_i} ti)然后乘 ( c + d c ) \binom{c+d}{c} (cc+d)
  ^^E:算这种“割”(虚线)的贡献
【长更】一句话题解(组队训练的俄罗斯题、oj、camp)_第1张图片
  *F:二分,要么全砍成 m i d 2 \frac{mid}{2} 2mid 以内,要么保留 m i d 2 \frac{mid}{2} 2mid 以上最短的一段,记为 a a a,然后其他砍成 m i d − a mid-a mida 以内
  G:分类讨论
  *H:只需判断 c ∈ ( b , a + b ) c \in (b,a+b) c(b,a+b) 的情况, c ! a ! b ! = ( a + b a ) ( c + 1 ) ( c + 2 ) ⋯ ( a + b ) \frac {c!}{a!b!}=\frac{\binom{a+b}{a}}{(c+1)(c+2)\cdots(a+b)} a!b!c!=(c+1)(c+2)(a+b)(aa+b),因此只用考虑 c + 1 , ⋯   , a + b c+1,\cdots,a+b c+1,,a+b 的质因子。考虑质因子 2 2 2 的数量,因为 ∑ k = 1 ⌊ a + b 2 k ⌋ − ( ⌊ a 2 k ⌋ + ⌊ b 2 k ⌋ ) ≤ k \sum_{k=1} \lfloor \frac{a+b}{2^k} \rfloor - (\lfloor \frac a{2^k} \rfloor + \lfloor \frac b{2^k} \rfloor) \leq k k=12ka+b(2ka+2kb)k,因此 [ c + 1 , a + b ] [c+1,a+b] [c+1,a+b] 这个区间的长度至多为 2 k 2k 2k O ( log ⁡ ( a + b ) ) O(\log (a+b)) O(log(a+b))
  *J:分别考虑一个元素、两个元素、三个元素造成的贡献,三个元素的话是 ( n 3 ) − ( 最 大 值 都 在 一 个 人 身 上 ) − ( 有 两 个 最 大 值 在 一 个 人 身 上 ) \binom n3-(最大值都在一个人身上)-(有两个最大值在一个人身上) (3n)()()
  IK:

AIM Fund Contest (MIPT Workshop Open 4)

  I:略
  EH:队友说是沙雕题
  A:字符串必然是 a a a a ⋯ a aaaa\cdots a aaaaa 或者 a a a ⋯ a b b b ⋯ b aaa\cdots abbb\cdots b aaaabbbb 的形式
  *C: k ≤ 5 k \leq 5 k5 ( k − 1 固 定 ) × ( n − k + 1 选 1 ) (k-1固定) \times (n-k+1选1) (k1)×(nk+11) k ≥ 9 k \geq 9 k9 ( k + 1 k ) \binom{k+1}{k} (kk+1) k = 6 k=6 k=6 ( 3 2 ) × ( 3 2 ) × ( 7 选 1 ) × ( 1 固 定 ) \binom 32 \times \binom 32 \times (7选1) \times (1固定) (23)×(23)×(71)×(1) k = 7 k=7 k=7 ( 3 2 ) + ( 3 2 ) + ( 3 2 ) + ( 5 选 1 ) \binom 32+\binom 32+\binom 32+(5选1) (23)+(23)+(23)+(51) k = 8 k=8 k=8 ( 4 3 ) × ( 3 2 ) × ( 3 2 ) × ( 4 选 1 ) \binom 43 \times \binom 32 \times \binom 32 \times (4选1) (34)×(23)×(23)×(41)
  *F:表示成 ∑ i = 1 k n a i = n \sum_{i=1}^k \frac{n}{a_i}=n i=1kain=n,这样的 { a 1 , ⋯   , a k } \{a_1,\cdots,a_k\} { a1,,ak} 集合( l c m lcm lcm 互不为倍数)每个 k k k 最多 15 个,然后容斥,容斥所要算的 l c m lcm lcm 也最多 800 多个
  *G:先确定符号,然后二分(每次询问 π m i d \frac{\pi}{mid} midπ。去你妈的 30 位精度,卡精度很好玩吗?
  J:排序区间不会相交,dp,设 f i f_i fi 表示前 i i i 个排好序的最小代价,枚举最后一段排序长度,只有 i \sqrt i i 种选择,用单调栈+dsu 啥的求后缀最小值
  *K:观察多几个统计量,发现叶子数对于 t y p e type type 有显著关系
  BD:

Petrozavodsk Winter-2017. Asia-Tsukuba 2016

  ABCDG:略
  E: 8 ! 8! 8! 枚举字母与符号的对应关系,然后表达式求值 考程设题很好玩吗?
  F:一开始默认都是 negative,然后 bfs 去把必要的东西翻成 positive
  H:每个无向连通块必须是树,把无向树缩起来,拓扑排序求最长路(无向树的结点就 dp 换根)
  *I:若 d = gcd ⁡ ( x , y ) > 5 × 1 0 4 d=\gcd(x,y) > 5 \times 10^4 d=gcd(x,y)>5×104,则 ( 0 , 0 ) , ( x − 1 , y ) , ( x d , y d ) , ( x , y − 1 ) (0,0),(x-1,y),(\frac xd,\frac yd),(x,y-1) (0,0),(x1,y),(dx,dy),(x,y1);否则解不定方程 a x + b y = d ax+by=d ax+by=d,则答案为 ( 0 , 0 ) , ( x , y ) , ( ∣ b ∣ , ∣ a ∣ ) (0,0),(x,y),(|b|,|a|) (0,0),(x,y),(b,a)
  J:设 f x , y f_{x,y} fx,y 表示圆心在 ( x , y ) (x,y) (x,y) 的答案,这个函数是凸的,模拟退火
  -K:超现实数不平等博弈

Petrozavodsk Summer-2017. JOI TST 2012 Selection

  A:dsu on tree
  B:扫描线得到若干个前缀立方体,要求体积并,枚举一维,set 维护折线
  C:暴力
  F:扫描线
  *G:链覆盖=二分图极大匹配,dp
  *I:设满足第 1 个人之后,第 i i i 个人要顺时针转 a i a_i ai,那么按 a i a_i ai 排序,代价是 min ⁡ j = 2 n ( 2 a j + n − a j + 1 ) \min_{j=2}^n(2a_j+n-a_{j+1}) minj=2n(2aj+naj+1),枚举断点维护这个
  DEHJ:

XV Open Cup named after E.V. Pankratiev. GP of Central Europe (AMPPZ-2014)

  ABCD:队友说是沙雕题
  E:分类讨论,若 p < q ∧ n ≥ p pp<qnp 则先手胜,根据这个来推导其余情况
  *F:先无视障碍物构造一个平凡的哈密顿回路,然后对于每个障碍物进行修正
  G:扫描右端点,单调栈维护区间最大最小,并依此用线段树维护可行左端点
  *I:每个上升序列会留下一半人,线段树维护上升序列
  *J:一个连通块用其 lca 来代表,两个连通块取交等价于两个 lca 取深度较深的那个,最后判断最终得到的点是否合法
  *K:每行建一个点,每列建一个点,对于原来的点 ( x , y ) (x,y) (x,y) 将行 x x x 连向列 y y y 一条长度为 0 0 0 的边,然后相邻两行、相邻两列连边,跑最短路 x 1 x_1 x1 x n x_n xn
  H:

XV Open Cup named after E.V. Pankratiev. GP of Europe (CEPC-2014)

  DEFK:略
  *A:离散化时间点,区间 dp,设 f i , j f_{i,j} fi,j 表示只考虑完全包含在区间 ( i , j ) (i,j) (i,j) 内的怪物的最小代价,转移就是枚举区间内最大的怪在什么时候被干掉
  B:回文树 dp,设 f i f_i fi 表示 i i i 这个回文串最后一步执行 2 操作得到该串所需要的最少步数
  ^G:当前的形状一定是山峰形,状压 dp 设 f i , s f_{i,s} fi,s 表示考虑了前 i i i 个数,山峰左半边有 s s s 这些数(前 i i i 个数的和减去 s s s 即可得到山峰右半边),是否可行
  *H:结论:若你的 prefer list 是 ( v 1 , c 1 ) , ⋯   , ( v k + 1 , c k + 1 ) (v_1,c_1),\cdots,(v_{k+1},c_{k+1}) (v1,c1),,(vk+1,ck+1),则必有 v 1 < v 2 < ⋯ < v k + 1 v_1v1<v2<<vk+1。知道这个之后就倒着 O ( n k ) O(nk) O(nk) dp
  J:比例就是全局的比例,然后贪心
  *L:线段树维护区间上凸壳
  CI:

JAG Autumn 2014, MIPT2014 Round 1

  ABDG:队友说是沙雕题
  *C:dp,设 f i f_i fi 表示走到 i i i 然后建立存档点的最小期望时间,转移的决策点不会离 i i i 太远,不然期望距离太大了
  F:先做网络流求不翻转的答案,翻转的边必然是一条从汇点集连向源点集、存在剩余流量的边
  H:表达式求值+基础几何
  J:tarjan+多重背包
  *K:一个格子加上往外两圈共 19 个格子, 2 19 2^{19} 219 枚举所有的可能性,看是否全部都满足中间格子的第一步等于第二步。这是充分必要条件
  EI:

XIX Open Cup named after E.V. Pankratiev. Grand Prix of China

  F:队友说是沙雕题
  A:考虑每个第一次出现的数改成前面出现过的数或者后面第一次出现的数
  *D:生成函数推一波
  I:burnside+灵活使用组合数公式
  BCEGHJK:

Petrozavodsk Winter-2019. Yandex Cup-2019

  A:满足贪心性质的
  C:上下界可行流
  -D:拟阵交
  H:每行最小值的最大值
  I:若不是完美匹配就一定可行,因此只要判断是否可以完美匹配,任意构造一种完美匹配然后判断方向和   m o d   4 \bmod 4 mod4 是否跟初始局面一致
  *J:左右晃荡直到到达原点
  BEFG:

Petrozavodsk Winter-2019. Oleksandr Kulkov Contest 1

  F:队友说是沙雕题
  -A:类似于 FWT 的推法
  *D:固定一个足够大的 n n n,对于每个 f n − b i f_{n-b_i} fnbi 算出它关于 f 1 , ⋯   , f k f_1,\cdots,f_k f1,,fk 的线性组合系数(需要常系数线性递推的优化),然后高斯消元
  E:每堆石子的最优处理方法是分裂出单独的一个,因此答案为总数除以 2 上取整
  H:二分出答案的下取整,然后推式子算出剩下的分数
  J:要么问号全都能推出来,要么问号全相同但不知道是什么。前者直接求完美匹配方案数,后者枚举问号是什么然后算完美匹配方案数(注意去重)
  ^K:答案等于 a 1 − a 2 a_1-a_2 a1a2,因为后面的都被抵消掉了
  BCGI:

Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection

  AC:队友说是沙雕题
  *D:每个格子按方向拆成两个点,连边,跑拓扑序
  *E:二分一个 m i d mid mid(但实际上不需要二分),把队伍最后 m i d mid mid 个男人扔到最前面,队伍合法的条件是任意一个真后缀的 F − M ≥ − 1 F-M \ge-1 FM1
  G:环套树 dp
  *H:每个点连 8 条边(向上下左右最远的格子连 1 1 1 边,向上下左右相邻的格子连 2 2 2 边),跑三队列 bfs
  *I:从大到小贪心匹配,若一个人只剩一个名额了也要立即匹配,用线段树维护
  BF:

Moscow Workshop Pre-Finals 2020

Day 2 GP of Tokyo

  既然你都放到 cf 上了
  *D:先是一大串题意转化,变成每一位初始有若干个 1 1 1,每次可以选同一位的两个 1 1 1 扔到下一位变成 4 个 1 1 1。题解做法是二分+dp(有用的状态数很少),我是贪心打补丁
  E:题意转化成若干不同的 2 2 2 的幂乘到 a i a_i ai 上,然后 60 ⋅ 2e5 ⋅ 200 60\cdot\text{2e5}\cdot200 602e5200的 dp 冲过去了
  *F:最短距离就是 a i a_i ai b i b_i bi 匹配,用数据结构优化一下算个方案
  H: ( − 1 e 9 , 0 ) ( 1 , 1 e 9 ) ( 0 , − 1 e 9 ) ( 1 e 9 , − 1 ) (-1e9,0) (1,1e9) (0,-1e9) (1e9,-1) (1e9,0)(1,1e9)(0,1e9)(1e9,1)
  I:分奇偶构造,大概是 2 i   m o d   n 2^i \bmod n 2imodn 这样轮回
  ABCGJKL:

你可能感兴趣的:(【长更】一句话题解(组队训练的俄罗斯题、oj、camp))