【长更】一句话题解(各大oj)

  太简单的题,但是又要记录下来做过哪些东西,就写在这里啦~
  早搞不搞,等到快退役了才来搞

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

AtCoder

AtCoder Grand Contest 028

  A:若有解,则 l c m ( n , m ) lcm(n,m) lcm(n,m) 就是最小解
  B:对每个 i i i 考虑删 a j a_j aj a i a_i ai 造成的贡献,即 n ! ∣ i − j ∣ + 1 a i \frac{n!}{|i-j|+1}a_i ij+1n!ai
  *C:每条边拆成 a i a_i ai b j b_j bj 两条边,还是找最小圈。那么有三种情况:每个点只贡献 a i a_i ai、每个点只贡献 b i b_i bi、其他。对于第三种情况,枚举一个 i i i 表示它贡献了 a i + b i a_i+b_i ai+bi,那么剩下的就是选 a 1 , ⋯   , a n , b 1 , ⋯   , b n a_1,\cdots,a_n,b_1,\cdots,b_n a1,,an,b1,,bn 里去掉 a i a_i ai b i b_i bi 的最小的 n − 2 n-2 n2
  *D:设 f i , j f_{i,j} fi,j 表示最小元素为 i i i、最大元素为 j j j 的连通块数,通过容斥转移
  **E:贪心按位考虑,根据题目性质可以化为一个类似于 LIS 的 dp
    看大题解

AtCoder Grand Contest 029

  A:略
  B:lowbit 相同的分一组,每组从大到小贪心
  C:二分,当 a i < a i − 1 a_i < a_{i-1} ai<ai1 的时候就把 a i a_i ai 抬升一位, a i a_i ai 抬满了就抬 a i − 1 a_i-1 ai1,注意一些细节

AtCoder Grand Contest 030

  A: b + min ⁡ ( a + b + 1 , c ) b+\min(a+b+1,c) b+min(a+b+1,c)
  B:先做出间隔序列(与起点相邻的间隔在序列两端),答案等价于序列上找一个位置叉掉,其中一侧乘上系数 1 , 3 , 5 , 7 , ⋯ 1,3,5,7,\cdots 1,3,5,7,,另一侧乘上系数 2 , 4 , 6 , 8 , ⋯ 2,4,6,8,\cdots 2,4,6,8,。预处理前缀后缀阶梯,枚举叉掉的位置。
  *C:首先找一个偶数的 n n n,奇数行放 ( r + c )   m o d   n (r+c) \bmod n (r+c)modn,偶数行放 ( r + c )   m o d   n + n (r+c) \bmod n+n (r+c)modn+n,这样会得到 k = 2 n k=2n k=2n 的解,如果多了就把最大的 k + n k+n k+n 变回 k k k
  D:设 d p i , j dp_{i,j} dpi,j 表示一个小的数初始在 i i i、一个大的数初始在 j j j,最终造成的贡献总和,按操作倒序 dp,每次转移是 O ( n ) O(n) O(n) 的。最后 ∑ i , j ∣ a i < a j d p i , j \sum_{i,j | a_i<a_j} dp_{i,j} i,jai<ajdpi,j 即是答案
  *E: 0 → 1 0 \to 1 01 视为红线, 1 → 0 1 \to 0 10 视为蓝线,那么反转一位相当于线移动一位,答案相当于线的匹配, O ( n ) O(n) O(n) 枚举起点的匹配再 O ( n ) O(n) O(n) check 即可
    看大题解
  F:数字从大到小 dp,看成左右括号匹配,设 d p i , j , k dp_{i,j,k} dpi,j,k 表示考虑了前 i i i 个数,有 j j j 个空余左括号,其中 k k k 个是给定数字作为左括号,的方案数

AtCoder Grand Contest 035

  A:必定是 a 1   a 2   a 3   a 1   a 2   a 3 ⋯ a_1~a_2~a_3~a_1~a_2~a_3 \cdots a1 a2 a3 a1 a2 a3 这样循环,分类讨论共 3 种情况
  *B:做一棵 dfs 树,非树边随便定向,树边从下往上定向,判断根是否合法
  *C:如图: n n n 为奇数就大风车, n n n 为偶数就另外加上 n n n n n n 2 2 2 的幂无解
在这里插入图片描述
  **D:考虑每张牌的贡献次数,设 f l , r , x , y f_{l,r,x,y} fl,r,x,y 表示 [ l , r ] [l,r] [l,r] 这个区间, l l l 贡献 x x x 次, r r r 贡献 y y y 次,的最小代价和。枚举最后吃的那张,发现它的贡献是 x + y x+y x+y,就 dp 下去了
    看大题解

AtCoder Grand Contest 036

  ^A:考虑 ( 0 , 0 ) , ( 1 0 9 , 1 ) , ( x , y ) (0,0),(10^9,1),(x,y) (0,0),(109,1),(x,y),则 1 0 9 y − x = S 10^9y-x=S 109yx=S,令 y = ⌈ S 1 0 9 ⌉ y=\lceil \frac{S}{10^9} \rceil y=109S
  B:考场做法:每个元素向它走到的下一个元素连边,找循环节,暴力跑最后一层
    题解做法:连边,然后倍增求每个点走 2 k 2^k 2k 层到哪
    看大题解
  *C:符合条件的序列满足和为 3 M 3M 3M、单个元素不超过 2 M 2M 2M、奇数个数不超过 M M M,用组合数和容斥算方案数
  *D:设 p i p_i pi 0 0 0 到各点的最短路,dp p p p 序列的负差分
  E:大讨论

AtCoder Grand Contest 034

  A:若为 C < D C<D C<D 则先让 B B B 走到 D D D 再让 A A A 走到 C C C,两人分别判断;若为 D < C D<C D<C 则让 A A A 尽早超越 B B B 然后分别判断
  B:相当于 BC 是障碍物,A 要跳过障碍物到最远的地方去
  C:二分,然后推式子发现最多只有一科不是满分,枚举那一科然后剩下的贪心选

AtCoder Grand Contest 037

  A:略
  B:显然贪心可得最优答案。然后计数,每个第三色有多少种第二色选择,每个第二色有多少种第一色选择,全部乘起来,再乘个 n ! n! n!
  *C:倒过来做,如果 b i > a i b_i>a_i bi>ai b i > b i − 1 + b i + 1 b_i>b_{i-1}+b_{i+1} bi>bi1+bi+1 那么这个 b i b_i bi 必然要被操作,用一个堆找最大的 b i b_i bi 来做

DISCO Presents Discovery Channel Code Contest 2020 Qual

  A:略
  B:枚举分界点,答案是左右两边的差的绝对值
  C:同一行的草莓先把这行划分掉,然后如果有一行没草莓就复制它上面或下面的分法
  *D:解法一:暴力。每个数字是有循环节的(即使用多少个这个数字可以得到它自己),把循环节消掉了就是暴力
    解法二:顺序是不影响的,那么考虑把每个数字全部拆成 1,因此进位的影响就是 ⌊ 数 位 和 − 1 9 ⌋ \lfloor \frac{数位和-1}{9} \rfloor 91
  *E:先二分一个位置 i i i 使得 [ i , i + n − 1 ] [i,i+n-1] [i,i+n1] [ i + 1 , i + n ] [i+1,i+n] [i+1,i+n] 的回答是不同的,那么 i i i i + n i+n i+n 的颜色就确定了,并且 [ i + 1 , i + n − 1 ] [i+1,i+n-1] [i+1,i+n1] 这段区间是两种颜色相同的。剩下的都可以利用 [ i + 1 , i + n − 1 ] [i+1,i+n-1] [i+1,i+n1] 来完成

AtCoder Grand Contest 043

  我为什么要交题
  A:答案等于从 ( 1 , 1 ) (1,1) (1,1) 走到 ( n , m ) (n,m) (n,m) 所经过的最少的连续 1 1 1 的段数, O ( n 2 ) O(n^2) O(n2) dp
  *B:先判断答案是奇数还是偶数(看成异或,Lucas 定理算每个数被贡献了多少次),若为奇数则答案为 1 1 1,否则若原序列有 1 1 1 则答案为 0 0 0,否则把 2 2 2 当成 1 1 1 再判奇偶

AtCoder Grand Contest 044

NOMURA Programming Competition 2020

  AB:略
  C:从顶层到底层,逐层确定每层能选多少个点, O ( n ) O(n) O(n)
  *D:图是环套树森林,答案等于 ( n − 1 ) k − ( 每 种 方 案 下 的 连 通 块 数 ) (n-1)^k-(每种方案下的连通块数) (n1)k(),而连通块数等于环数,因此要算出每种方案下的环数之和,每个环单独贡献, O ( n 2 ) O(n^2) O(n2) 求多项式 ∏ ( 1 + s i z e i ) \prod(1+size_i) (1+sizei)
  F:一个方案合法的充要条件是,对于每一位的第一个 1 1 1 和最后一个 0 0 0,这之间的数在以后的位上都要完全相同。于是 O ( n m ) O(nm) O(nm) dp 一下
  E:

ACL Contest 1

  *A:思路是每个元素向其左边能到的点连边。但实际上只要做出左边开始的下降序列,那么每个元素只需要在这个序列上连一个区间就行了,可以精细实现为 O ( n α ( n ) ) O(n\alpha(n)) O(nα(n))

AtCoder Regular Contest 107

  AB:略
  C:行列独立,任意两行如果能换就连一条边,每个连通块大小的阶乘的积就是行的答案,列同理
  *D:dp,设 d p x , y dp_{x,y} dpx,y 表示当前层有 x x x 个数、已确定计入答案的有 y y y 个数,的方案数。同层转移,即 d p x , y dp_{x,y} dpx,y 转移到 d p x − 1 , y + 1 dp_{x-1,y+1} dpx1,y+1 d p 2 x , y dp_{2x,y} dp2x,y
  E: ∀ i , j ≥ 4 ,   a i + 1 , j + 1 = a i , j \forall i,j \ge 4,\ a_{i+1,j+1}=a_{i,j} i,j4, ai+1,j+1=ai,j,因此只要算前四行和前四列即可
  F:

AtCoder Grand Contest 049

  A:每个点产生贡献当且仅当它是它及其前驱中最早被选的点,假设它及它前驱共有 c n t i cnt_i cnti 个点,可以发现这个概率是 1 c n t i \frac{1}{cnt_i} cnti1
  B:相当于每次可以选择一个 1 1 1 前移一位,如果两个 1 1 1 撞上了可以一起消掉。因此直接 two pointers 匹配
  CDEF:

AtCoder Regular Contest 119

  A:枚举 b b b
  B:相当于每个字符串的 0 0 0 的要按顺序依次匹配
  C:观察可得一段序列合法当且仅当奇数位的和等于偶数位的和
  *D:建出二分图,每个连通块可用其生成树代替,所有的树要么都保留一个左边点,要么都保留一个右边点
    看大题解
  *E:只有 a l − 1 ≤ a l a_{l-1} \le a_l al1al a r ≤ a r + 1 a_r \le a_{r+1} arar+1 a l − 1 ≥ a l a_{l-1} \ge a_l al1al a r ≥ a r + 1 a_r \ge a_{r+1} arar+1 的交换才会使答案更优,答案的改变量等于区间 [ a l − 1 , a l ] [a_{l-1},a_l] [al1,al] [ a r , a r + 1 ] [a_r,a_{r+1}] [ar,ar+1] 的交的两倍,因此问题转化成求最大区间交。
    看大题解
  F:

Codeforces

Codeforces Round #559 Div.1

  A:首先让全部数字都是每行的 min ⁡ \min min 值,然后找 m − 1 m-1 m1 个最大值和 1 1 1 个次大值替换成列的 max ⁡ \max max 值。
  *C:考场解法:想办法做出拓扑图就能得到最终序列了,于是线段树优化连边得到拓扑图,时间 O ( n log ⁡ n ) O(n \log n) O(nlogn)
    题解解法:先判掉 i < j < n e x t i < n e x t j i<j<next_i<next_j i<j<nexti<nextj 的情况,然后 i i i n e x t i next_i nexti 连边,构成一棵树,跑 dfs 序再倒过来。 O ( n ) O(n) O(n)
  **E:先用 4 log ⁡ 4\log 4log 的时间确定每个点的层(类似于整体二分,同一二分层的奇数段一起做,偶数段一起做),再用 3 log ⁡ 3\log 3log 的时间为每个点找父亲(逐二进制位确定每个点父亲,模 3 3 3 相同的层一起做)。

Educational Codeforces Round 67

  没 AK,丢人~
  AB:略
  C:要单调不降的区间就全都平着,其他都下降
  D:区间排序等价于不断交换相邻两个,因此 a a a 数组必须包含 b b b 数组的所有逆序对。随便维护
  E:dp,换根
  *F:考场解法:设 f i , j , k f_{i,j,k} fi,j,k 表示到了第 i i i 个元素,结尾为 j j j,共 k k k 段,的方案数。 k k k 用 AGC019E 的思想优化成 0 ∼ 2 0\sim 2 02 j j j 扔线段树上,那么转移就是区间乘和加(矩阵)。代码过长,常数过大,请勿模仿
  G:费用流直接上。因为最大流只有 50,因此相当于跑 50 次最短路,这是不会 T 的。但还是把你吓得半死甚至丢了一血

Codeforces Round #572 Div.1+Div.2

  ABC:略
  D1:判是否存在度数为 2 的点,因为度数为 2 的点两边一定是一样的
  *D2:选一个叶子为根,从下往上一条边一条边确定
  ^E:史上最大诈胡题 两边同乘 ( a i − a j ) (a_i-a_j) (aiaj),平方差公式
  ^*F:设 f i , j , x f_{i,j,x} fi,j,x 表示到了第 i i i 个数,选了 j j j 个,最小间隔为 x x x 的方案数。后两维的有用状态总和为 O ( k ⋅ a k ) = O ( a ) O(k \cdot \frac ak)=O(a) O(kka)=O(a)

Codeforces Round #580 Div.1

Codeforces Round #583

  A:全买 1$ 和 5€,暴力枚举买了多少个 1$
  B: n + 1 − max ⁡ ( 0 , n − b ) − max ⁡ ( 0 , n − g ) n+1-\max(0,n-b)-\max(0,n-g) n+1max(0,nb)max(0,ng)
  C:要么原串合法,要么把最后一个左括号放到开头,要么把第一个右括号放到结尾
  D:答案最多为 2 2 2(封住左上角),因此判断是否存在割点或者左上右下不连通
  E: d i d_i di 从大到小做,最长的作为主链,然后贪心填满主链,其他随便挂在主链上
  *F:一定能从某个地方割开成链然后从左到右贪心匹配。因此先假设是 1 1 1 m m m 的链,每个点的坐标要么是正贡献要么是负贡献,看它前面的 a a a b b b 的数量。然后每次把开头的人丢到结尾,可以快速计算对答案的影响。
  *G:每行开一个 bitset,若某两行的 bitset 不是包含关系则有解。判断是否存在两行不互相包含只需按 size 从小到大排序然后依次检查相邻两个,用 set 维护
    看大题解
  H:若直径小于 k k k 则任意染;若 k = 2 k=2 k=2 则黑白染色;否则直径按 1 1 1 k k k 循环染,剩下的枝都有长度限制,在长度限制以内方案是唯一的,超过长度限制则无解

Codeforces Round #584

  A:贪心
  B:模拟 1 0 5 10^5 105
  C:枚举分界的数字,小于它的染 1 色,大于它的染 2 色,这个数字单独判断
  D:看成连边,然后答案为 n n n 减生成森林的边数
  E1E2:只有 min ⁡ ( n , m ) \min(n,m) min(n,m) 列是有用的,随便状压一下
  F:做出最短路图,按拓扑序处理每一个点,这个点相当于选择一条入边然后更新 trie。选择哪条入边更优秀那就看谁是 lca 的小的儿子
  G1:设一个数字最左出现在 l l l,最右出现在 r r r,那么 [ l , r ] [l,r] [l,r] 要全部同色。栈+并查集维护一下就好了
  **G2:维护这个区间并。给 [ l , r − 1 ] [l,r-1] [l,r1] 全体加 1 1 1,那么 0 0 0 就是区间并的分界点。用线段树维护这个,然后求区间众数的话再开一棵线段树,每个数的出现次数赋值到最早出现的位置,那么就是个区间最大值
    看大题解

Codeforces Round #594 (Div. 1)

  A:若第一行存在相邻同色格子,那么后面的行的方案是唯一的;否则等价于第一列的方案数。都是一个递推过去
  *B:先把原串循环移位成一个合法括号序(若不存在则答案为 0),然后只有最外层和次外层的匹配括号对才能交换,贡献可以用栈来算
  C:大模拟
  D:有向图 tarjan 缩环,找到一个没有出度的强连通分量即可作为 jury,其余作为猫
  E:一定是第一行从小到大,第二行从大到小,于是最大路径只能是走边界的两条之一。因此问题变成,从小到大排序,前两个数放左上和右下,后 2 n − 2 2n-2 2n2 个数平分成两个集合,使得最大和最小。 O ( n 3 max ⁡ a ) O(n^3\max a) O(n3maxa) dp

Codeforces Round #602 (Div. 1)

  *A:任意括号序都是可以被构造的,当前这位不合你意就在后面找一个换
  B1B2:询问离线,把元素以大小为第一关键字、位置为第二关键字排序,依次激活,线段树二分查询第 p o s pos pos 个。
  C:二分,用二维前缀和判断
  *D1D2:题分为 h i = h i + 1 h_i=h_{i+1} hi=hi+1(无论如何选都贡献 0)和 h i ≠ h i + 1 h_i\not=h_{i+1} hi=hi+1(可贡献 1、-1、0)两种,由对称性,正贡献的方案数等于负贡献的方案数,所以非零贡献的方案数除以 2 就是答案

Codeforces Round #614 (Div. 1)

  AB:略
  C:只有经过 0 0 0 的路径是有用的,且必然是在一条路径上放 0 0 0 ~ l e n − 1 len-1 len1。类似于区间 dp,设 f u , v f_{u,v} fu,v 表示 u u u v v v 这条路径的答案。
  D:集合点一定在某个关键点上,预处理一些东西后任意两个关键点之间的距离可以 O ( 1 ) O(1) O(1) 算。那么就枚举集合点,然后暴力算距离, O ( k 2 ) O(k^2) O(k2)。注意 k = 0 k=0 k=0

Hello 2020

  AB:略
  C:算每个连续段的贡献
  D:按一边的区间排序,set 维护另一边的开始结束时间,判断这边相交的是否有另一边没交,再反过来做一次
  E:枚举中心点,剩下的三点只要不在该点的同一侧即可,于是极角排序+two pointers
  FG:

Codeforces Round #625 (Div. 1)

  A:移项得到 i − b i i-b_i ibi 相同的组一队
  B:终点出发求最短路图,每个 p i p_i pi 依照最短路图的出边进行讨论递推
  C:二维偏序随便搞搞
  D:一个串的最小表示是:(开头可能有奇数个 1)+(若干个0)+(奇数个1)+(若干个0)+(奇数个1)+…+(结尾一堆1),把这个形状 hash 起来,线段树维护区间 hash
  EF:

Codeforces Round #621 (Div. 1+Div. 2)

  A:贪心
  B:若有步长等于 x x x,则可以一步到位;否则等于 ⌈ x 最 长 步 长 ⌉ \lceil \frac {x}{最长步长} \rceil x
  C:长度只能为 1 或 2
  D:从起点跑一次 bfs,从终点跑一次 bfs,再找 bfs 序相邻的两个关键点连边
  *E:枚举分界线(即枚举左集合的最右牛),每种 f f f 的牛独立算贡献
  FG:

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,再凑后面的。
  *F:答案上限是奇数个数,并且随机选一个数, O ( n ) O(n) O(n) 判断 a i , a i + 1 , a i − 1 a_i,a_i+1,a_i-1 ai,ai+1,ai1 的质因子,至少 n 2 \frac n2 2n 的概率是正确的,随机判断 20 个即可
    看大题解
  *G:加一个 a i = 0 a_i=0 ai=0 的点,每条边 ( u , v ) (u,v) (u,v) 赋权值 a u + a v a_u+a_v au+av,答案等价于最大生成树减去点权和。用 Boruvka 求最大生成树,每个点连出去的边用权值的高维前缀和来求
  H:

Codeforces Round #626 (Div. 1)

  A:前缀和为 0 0 0 的位置作为分界点,把序列分成若干段,有问题的段重排
  B:按位考虑,每一位相当于要求两个数的和在两个区间内,two pointers
  *C:右边的点按照邻集分类,同类求和,不同类求 gcd ⁡ \gcd gcd
  *D:dp,设 f i , j , k f_{i,j,k} fi,j,k 表示倒着枚举到了第 i i i 个数,数字大小为 j j j,有 k k k 个数字,的最优答案。复杂度分析同那种看起来是 O ( n 3 ) O(n^3) O(n3) 实际是 O ( n 2 ) O(n^2) O(n2) 的树形 dp
  EF:

Codeforces Round #631 (Div. 1)

  A:从左往右放,每个 l i l_i li 放在 max ⁡ ( i , ∑ j = i n l j ) \max(i,\sum_{j=i}^n l_j) max(i,j=inlj)
  B: a i a_i ai 的二进制最高位必须是递增的,因此最多 30 来个,随便 dp
  C:每次贪心找最大的可删除的结点
  DE:

Codeforces Round #633 (Div. 1)

  A:填平 max ⁡ i < j , a i > a j a i − a j \max_{i<j,a_i>a_j} a_i-a_j maxi<j,ai>ajaiaj 即可
  B:最小:若所有叶子的深度的奇偶性相同就是 1,否则是 3;最大:初值为 n − 1 n-1 n1,每当有 x x x 个叶子父亲相同就减去 x − 1 x-1 x1
  C:打表找规律
  D:树形 dp,设 f i , 0 / 1 f_{i,0/1} fi,0/1 表示以 i i i 为根的子树, i i i 选或不选,的最优答案。 f i , 0 = 儿 子 数 量 − 1 + max ⁡ { f s o n , 0 , f s o n , 1 } f_{i,0}=儿子数量-1+\max\{f_{son,0},f_{son,1}\} fi,0=1+max{fson,0,fson,1} f i , 1 = max ⁡ { f s o n , 0 } + 1 f_{i,1}=\max\{f_{son,0}\}+1 fi,1=max{fson,0}+1,旋根 dp
  E:

2020 ECNU Campus Online Invitational Contest

  AI:略
  C:cdq 模板题
  ^D:若存在 0 0 0 权或所有结点权值均 ≥ 2 \ge 2 2 则直接找一个最小权点即可;否则先找到最长的 1 1 1 构成的直径,然后再考虑是否有两条最长的 1 1 1 直径用一个 2 2 2 连起来,后者用旋根 dp 预处理每个 1 1 1 最长能延伸到多少。
  F:SA 搞一搞,注意坑点,比如 / 和 . 互换
  BEGH:

Educational Codeforces Round 89

  BC:略
  A:设两种原材料分别有 a , b a,b a,b 个,最终合成了 x x x 个物品,则有 a − x + b − x ≥ x a-x+b-x\ge x ax+bxx,即 a + b ≥ 3 x a+b \ge 3x a+b3x,因此输出 min ⁡ { a , b , ⌊ a + b 3 ⌋ } \min\{a,b,\lfloor \frac{a+b}{3} \rfloor\} min{a,b,3a+b}
  D:找到 a i a_i ai 最小的质因子 p p p,则 d 1 = p d_1=p d1=p d 2 = a i d_2=a_i d2=ai 除以 p p p 除到不能除为止,若 d 2 = 1 d_2=1 d2=1 表示无解
  E:相邻两段的分界线是造成方案不唯一的原因,预处理后缀最小值然后随便搞搞
  *G:类似于 LCS 一样 dp,预处理第一个串 l e n i len_i leni 表示从 s i s_i si 出发第一次到达空串需要多长。
  F:

2020 Ateneo de Manila University DISCS PrO HS Division

  ABCDEFG:略
  H:设 M = p 1 c 1 p 2 c 2 ⋯ p k c k M=p_1^{c_1}p_2^{c_2}\cdots p_k^{c_k} M=p1c1p2c2pkck N = p 1 d 1 p 2 d 2 ⋯ p k d k N=p_1^{d_1}p_2^{d_2}\cdots p_k^{d_k} N=p1d1p2d2pkdk,那么会有 d i ∏ j = 1 k ( 1 + d j ) = 2 c i d_i\prod_{j=1}^k(1+d_j)=2c_i dij=1k(1+dj)=2ci,枚举 gcd ⁡ ( c 1 , c 2 , ⋯   , c k ) \gcd(c_1,c_2,\cdots,c_k) gcd(c1,c2,,ck) 的约数作为 ∏ ( 1 + d j ) \prod (1+d_j) (1+dj) 判断一下合不合法就行了
  I:问题转化为问每一个三角形内部包含了多少点。预处理出每条线段下方有多少点即可,注意线段垂直的情况

Codeforces Round #664 (Div. 1)

  A:枚举选多少个 > w >w >w a i a_i ai
  B:每条边记作 ( i , j ) (i,j) (i,j) 表示它所属的出边集大小为 i i i、它排名为 j j j,而每个点必须恰好选一条入边,因此可以得到所有 ( i , j ) (i,j) (i,j) 之间的互斥关系,然后 O ( k ! ) O(k!) O(k!) 枚举
  *C:二分,check 的时候求出答案点横坐标、纵坐标、横纵坐标差的合法区间
    看大题解
  D:简单树形 dp,设 f i , 0 / 1 f_{i,0/1} fi,0/1 表示 i i i 为根的子树, i i i 往上走是上升还是下降,的最小代价
  E:

Codeforces Round #706 (Div. 1)

  A:按 x 2 x^2 x2 y 2 y^2 y2 排序
  B:出生点必须在顶峰,而且必须在唯一的最长单调段的顶峰,然后讨论一下这个顶峰的较短单调段
  *C: 3 3 3 的倍数的行全染掉,最后一行讨论一下
  DEF:

Codeforces Round #707 (Div. 1)

  ^A:差分序列如果有不相邻的相同值就一定是 yes,因此序列最长为 O ( a ) O(\sqrt{a}) O(a ),取原序列前 3000 3000 3000 个数用 O ( n 2 ) O(n^2) O(n2) 的方法判断即可
  B:二分,枚举每种颜色计算相撞的天数
  CDEF:

Codeforces Round #709 (Div. 1)

  A:每天优先选第一个人,然后如果发现有人超了,就把选他的天进行调整,调整完行就行,不行就不行
  B:提神醒脑小链表
  C:单调栈优化dp
  *D:先 flyod 求出任意两点最短路,然后反向 floyd 求出任意两点间的最松限制
  EF:

Codeforces Round #745 (Div. 1)

  A:精细地实现 O ( n 3 ) O(n^3) O(n3)
  *B:题目的条件等价于“笛卡尔树深度为 m m m 的节点恰有 k k k 个”,大力 O ( n 5 ) O(n^5) O(n5) dp 冲过去
  C: x + y ≤ m x+y \le \sqrt m x+ym 的用一个周期表记录下来, x + y > m x+y > \sqrt m x+y>m 的暴力
  DEF:

Codeforces Round #749 (Div. 1 + Div. 2)

  濒临紫名了。。。危
  ^A:傻瓜解法:范围这么小这不直接冲 dp?
    聪明解法:要么总和是合数,否则一定能减去一个奇数变成合数
  B:一定有点没作为 b b b 被限制过,以它为中心做个大菊花
  C:NO 当且仅当存在一个 X 它的右上也是 X
  D:先用 n − 1 n-1 n1 步求出 a n a_n an(依次假设 a n = 1 , 2 , ⋯   , n − 1 a_n=1,2,\cdots,n-1 an=1,2,,n1,用前面的 n n n 与它遥相呼应),然后用 n − 1 n-1 n1 步求出其他所有数
  *E:YES 当且仅当每个点的询问度数是偶数(想象在询问点对间连边,会构成欧拉图),输出方案只要在生成树上走即可
  FGHI:

计蒜客

计蒜之道2019初赛第1场

  A:略
  *BCD:莫比乌斯反演优化 dp
    看大题解

计蒜之道2019复赛

  A:用线段树求每个数往左的最长下降序列长度及方案数,以及往右的最长上升序列长度及方案数。
  B:暴力模拟,当然太暴力是不能过的。
  **C:观察得出 S G ( x ) SG(x) SG(x) 等于 x x x 二进制下末尾 0 0 0 的个数。于是先求出 c n t [ i ] cnt[i] cnt[i] 表示 S G SG SG 值为 i i i x x x 有多少个,然后像快速幂一样自己 FWT 自己,共 log ⁡ \log log 次 FWT。
  D:贪心。由于每次要求最大值的区间是往右滑窗的,所以可以用单调队列。
  E:贪心。

JZOJ

2019.08.04【NOIP提高组】模拟 A 组

  t1:递推
  *t2:化成 x m ≡ x   ( m o d    n ) x^m \equiv x~(\mod n) xmx (modn),每个质因子下暴力解,再把解数乘起来
  *t3:解法一:LCT
    解法二:用两个倍增数组,一个存链上最小值(忽略方向,启发式合并),一个存方向

2017.11.09【NOIP提高组】冲刺A组

  *t1:NOI2015寿司晚宴(每个数最多含有 8 个小质因子和 1 个大质因子(以 n \sqrt n n 分大小),按大质因子分类,状压小质因子 dp)
  t2:边双缩起来得到一棵树,把直径连起来
  t3:保留初始 mst 的 O ( n ) O(n) O(n) 条边,以后每次 add 直接重建 mst

HNOI2018

  *d1t3(5657):11 条非树边 22 个关键点,建虚树,虚树上儿子对父亲的贡献系数可以预处理,然后 O ( 2 11 ) O(2^{11}) O(211) 枚举每条非树边的下点选不选,在虚树上做 dp
  d2t1(5658):预处理每个点只往左和只往右最远能到达哪里,然后从左往右每个点暴力扩展(要一段一段地跳),是线性的
  *d2t2(5659):转化成树的问题,每个点是一个权值序列,每次找平均权值最小的序列,并到父亲的末尾去,用堆+dsu 实现

NOI2020全国统一省选

  *d2t3(6741):矩阵树定理,把每条边视为 1 + w x 1+wx 1+wx,那么 det ⁡ \det det 就是生成树的边权和。 gcd ⁡ \gcd gcd 利用 φ ∗ 1 = i d \varphi * 1=id φ1=id 拆掉

散装

  4703:物品做背包,钱袋子 meet in the middle,注意折成 20 + 10 20+10 20+10 复杂度最优
  4829:蚂蚁问题,每次询问二分
  *4847:若 x x x y y y 的路上经过奇环,则一定可以,否则看路径长度的奇偶性。用广义圆方树
  *4939:左端点从左往右移,线段树维护右端点。每次左端点右移就相当于结算一些段
    看大题解
  5001:状压 dp,设 f s f_s fs 表示 s s s 这个集合的字符串的 trie 大小,肯定先把这个集合的公共字母全部提取出来,然后枚举一个分割来转移
  100003:树边从深度小的连向深度大的,返祖边从深度大的连向深度小的,最大费用循环流

BZOJ

  ^3083:换根是吓人的,实际上根据 i d id id r o o t root root 的关系可以把询问拆成至多两个 dfs 序区间,用链剖+线段树维护区间最小值
  *5016:每个询问 ( l 1 , r 1 , l 2 , r 2 ) (l_1,r_1,l_2,r_2) (l1,r1,l2,r2) 可以拆成 4 个前缀询问 ( r 1 , r 2 ) − ( l 1 − 1 , r 2 ) − ( l 2 − 1 , r 1 ) + ( l 1 − 1 , l 2 − 1 ) (r_1,r_2)-(l_1-1,r_2)-(l_2-1,r_1)+(l_1-1,l_2-1) (r1,r2)(l11,r2)(l21,r1)+(l11,l21),然后莫队

Ynoi

  4810:莫队,加法和减法用 bitset 解决,乘法暴力枚举 x x x 的因数判断
  *4811:链剖,线段树维护每个区间从左到右、从右到左、全 0 进入、全 1 进入得到的结果,询问按位贪心
  *4939:莫队求每个区间的 bitset,需要一些技巧
    看大题解
  4940:bzoj3083+bzoj5016

UOJ

Goodbye Jihai

  t1:按价格排序,那肯定是买便宜的然后白嫖贵的,所以前面做背包,枚举最后一个买的之后后面的按质量贪心选
  **t3:最优一定是从一个点出发左右扩展,且一个点往一边扩最多有 log ⁡ \log log 段,因此有用的区间最多 O ( n log ⁡ n ) O(n \log n) O(nlogn) 个,在这些上面做区间 dp
    看大题解

UOJ Easy Round #9

  A:正常情况下以起点为中心极角排序转一圈就好了,但是有可能所有点在起点的同一半平面上,但这可以从一侧开始走,走到 n n n 时递归成子问题
  *B:每个颜色块做 bfs 到达其他所有点的最短距离,用 bitset 求出对于其他每个点,有多少该颜色的点能沿最短路图到达它,能的点到它的距离就是最短距离,否则是最短距离 + 1 +1 +1
  C:

LOJ

  *2509:转化成树的问题,每个点是一个权值序列,每次找平均权值最小的序列,并到父亲的末尾去,用堆+dsu 实现
  *2978:“每个数包含奇数个哪些质数”可以看成 01 向量,做成线性基。区间太长时每个小质数都是基
    看大题解
  *2980:每个位置是一个向量 [ A i , B i , C i , 1 ] [A_i,B_i,C_i,1] [Ai,Bi,Ci,1],操作都是矩阵乘法,用线段树维护。
    看大题解

CometOJ

2019 Wannafly Winter Camp Day5

Comet OJ Contest #6

  A:略
  B: O ( n 3 ) O(n^3) O(n3) 暴力 dp。
  C:考场解法:扫描右端点,用线段树维护左端点的答案。其实就是要维护左端点到当前右端点之间,一共有多少个度数不为 0 0 0 的点。时间 O ( n log ⁡ n ) O(n \log n) O(nlogn)
     O ( n ) O(n) O(n) 做法:求所有区间的连通块数和,转化成计算每个点的贡献。让一个连通块在它的 LCA 处被统计,那么就是说:一个点,它的父亲边被砍掉了,它的儿子边至少有一条。

Comet OJ Contest #8

  AB:略
  C:不管什么顺序都是 ∑ i = 1 n − 1 b i a i + 1 \sum_{i=1}^{n-1} b_ia_{i+1} i=1n1biai+1,再枚举一个区间乘 k k k
  D:枚举右端点,线段树维护左端点答案
  E:枚举 f f f 的值为 i i i,那就是求 ⌊ n i 2 ⌋ \lfloor \frac{n}{i^2} \rfloor i2n 以内有多少个数没有平方因子,容斥反演一套打下去

Comet OJ Contest #13

  AB:略
  C:维护一个 1 1 1 的并查集,每行再用一个并查集维护每个元素最右边的 0 0 0 在哪里
  D:递推(设 f i , 0 / 1 f_{i,0/1} fi,0/1 表示到了第 i i i 个元素, a \sqrt a a 选了奇数个还是偶数个,的贡献),矩阵乘法加速
  E:枚举一条边经过的一个点,然后得到其余每个点在什么斜率下会被覆盖
  *F:大力分块

HDU

2021CCPC华为云挑战赛

  A:按 a i a_i ai 从大到小贪心放
  B:数据随机,枚举 2000 个 k k k,只判断序列前 20 个元素即可
  C:多重背包
  DEFG:

牛客

东华大学2020年程序设计竞赛

  ABC:略
  D:PreFinals 2020 Day3 F 从小到大一段一段地合并,行就行,不行就不行
  F:最后结论是,若存在一个串里面 1 的个数是奇数,则先手必胜,否则先手必败
  G:dp,设 f i f_i fi 表示考虑了前 i i i 个数的最优答案。转移只需考虑最后一个 0 0 0 和最后一个 − 1 -1 1
  H:建主席树,表示每个点到根路径上的值域线段树,每次询问二分。强行卡常不可取
  K:暴力(先 bfs 求出所有的 country,然后每个 country 边界点暴力往四周遍历,碰到别的 country 点就 break)复杂度是对的(隐约感觉,交了能过,还不会证
  EIJ:

2020牛客多校(第一场)

  一吨 paper 题加一两个用脚造数据的题
  F:队友说是沙雕题
  A:考场解法:(队友搞的)令 a i = s i ⊕ s i + 1 a_i=s_i \oplus s_{i+1} ai=sisi+1,对 a a a 数组求 SA,然后再怎么排个序
    题解解法:令 c i = min ⁡ { j − i   ∣   j > i ,   s i = s j } c_i=\min\{j-i~|~j>i,~s_i=s_j\} ci=min{ji  j>i, si=sj},对 c c c 数组求 SA 就是答案
  *B:CF Round 614 Div1 D 评论区粉兔 先求出第一步往哪棵子树走,走过去之后,这棵子树就只有素数间隔那么多个元素了,建虚树找重心
  D:KKT 条件
  H:先假设容量为 1 1 1,不断 SPFA 单路增广求出从源点到汇点的第 i i i 个流量所需的费用。每次询问等比例放大,相当于每 u i u_i ui 个流量为一种费用,问前 v i v_i vi 个流量总共需要多少费用, O ( 1 ) O(1) O(1) 回答
  *I:带花树,每个点拆成 d i d_i di 个点,每条边也多拆两个点出来,答案等于 最 大 匹 配 − 边 数 最大匹配-边数
  J:β 函数
  CEG:

2020牛客多校(第二场)

  D:略
  ^C:解法一:找到重心,然后叶子按 dfs 序排序,头尾匹配
    解法二:任找一个非叶节点作根,然后叶子按 dfs 序排序,假设有 s s s 个叶子,那么 l i l_i li l i + s 2 l_{i+\frac s2} li+2s 匹配
  *E:答案可以表示成 选 18 个 数 以 内 得 到 的 答 案 + 若 干 个 “ 选 18 个 数 以 内 组 成 0 ” 选18个数以内得到的答案+若干个“选18个数以内组成0” 18+180,先做 18 次 FWT 算出任选 19 个数以内的所有情况,然后后面的 dp 上去
  F:单调队列求滑窗最大值。注意线性预处理 gcd ⁡ \gcd gcd,这里至少有两种方法
  G:大力 bitset 冲过去
  *H:两种情况,若 x x x 是最大值,那么找 x x x 的两个前驱;若 x x x 不是最大值,则找一个 a [ i ] > x a[i]>x a[i]>x 使得 a [ i ] − a [ i − 1 ] a[i]-a[i-1] a[i]a[i1] 最小。用平衡树维护
  I:看作在网格图上从 ( 1 , n ) (1,n) (1,n) 不能走到主对角线,那么就是 bzoj 狼抓兔子,最小割用最短路实现
  J:对于输入的每个环长 r r r,把这个环“拉大” k   m o d   r k \bmod r kmodr 倍即可, k k k 是质数会保证操作一定可行
  K:枚举第二个圆上的点,推出积分式子,然后辛普森
  AB:

2020牛客多校(第三场)

  AL:略
  B:队友说是沙雕题
  C:先找到长度为 9 9 9 的边,然后看比它的前驱后继哪个长,结合叉积判方向
  D:分两种情况讨论,若 n n n m m m 小,则左边下边铺一个 L L L 型,剩下的点从左下角往右上角拓展;若 m m m n n n 小,则做一条直线+若干散点
  *E:把两个匹配的边都连上,会发现构成若干个大小为偶数且大于等于 4 4 4 的环,于是就可以 dp
  F:若 a , b a,b a,b 能约分则随便构造;否则若 b = 1 b=1 b=1 b b b 只有一种质因子则无解;否则 exgcd
  *H:按位考虑,假设当前要排序的区间是 [ l , r ] [l,r] [l,r],取一个最高位的修改操作使得它会把这个区间劈成两半,然后递归下去
  GIJK:

2020牛客多校(第四场)

  *A:从小到大枚举最大距离 x x x,算出这个距离最少需要多少关键点(每次找深度最深的点,它的 x x x 级祖先为根的子树删掉,用线段树实现,关键点数量是 O ( n x ) O(\frac nx) O(xn) 的),然后 two pointers 求答案
  B:队友说是沙雕题
  *C:倒着插入字符,维护前缀最大值,会发现形成了一个 trie(大小不超过 10 n 10n 10n),于是 trie 上建 sam
  *D:三种情况:1、一位一位来,发现答案 ≤ 9 \le 9 9;2、首段不超过 30 30 30,dp;3、首段超过 30 30 30,发现划分方案是唯一的
  *E:从小到大枚举当前的 x x x,比 x x x 小的记作 0 0 0,比 x x x 大的记作 1 1 1,那么就是问 x x x 的左右两边是否能消成特定数字;暴力的话可以从左往右用栈贪心,那么快一点就用线段树维护一下某段对栈的影响
  F:可以判断 C、D 分别在 AB 中垂线的左边还是右边,然后讨论
  H:倒序考虑所有质因子的倍数,没匹配过的按其最小质因子从大到小贪心匹配
  **J:类似 Kruskal,并查集维护每个连通块的大小、相邻连通块的大小之和,其中相邻连通块的大小之和用启发式合并邻居表+根号平衡
    看大题解
  G:

2020牛客多校(第五场)

  F:略
  D:队友说是沙雕题
  A:一定有一个传送门是随身带着的,因此 O ( n 3 ) O(n^3) O(n3) dp
  B:任选一个点作根,每个点求出它到根的异或和 s i s_i si,会发现任意两个点之间连边的话权值一定是 s i ⊕ s j s_i \oplus s_j sisj,那么就是个最小异或生成树
  *C:二维生成函数推一推
  E:等价于 [ 1 , 2 , ⋯   , n ] [1,2,\cdots,n] [1,2,,n] 经过这个置换会得到多少不同的排列,因此是所有环长的 l c m lcm lcm,要高精度
  *H:每个右端点有 O ( log ⁡ a ) O(\log a) O(loga) 个有效左端点,总共 O ( n log ⁡ a ) O(n \log a) O(nloga) 个有效区间(看作平面上的点,点权为 1 1 1),如果两个区间 [ l 1 , r 1 ] [l_1,r_1] [l1,r1] [ l 2 , r 2 ] [l_2,r_2] [l2,r2] 满足 l 1 ≤ l 2 ≤ r 1 ≤ r 2 l1 \le l_2 \le r_1 \le r_2 l1l2r1r2,那么新增一个区间 [ l 1 , r 2 ] [l_1,r_2] [l1,r2],点权 − 1 -1 1,每个询问树套树二维数点
  I: a n s = 2 3 ans=\frac 23 ans=32,方法为按对角线划分,连着两条对角线放 H,然后一条对角线交替放 E 和 G,边界点如果不合法就不放了,不影响极限
  K:队友说是大模拟
  GJ:

2020牛客多校(第六场)

  排列题大作战。。。
  *A:大胆猜想可以证明每次选一个环来操作是最优的,因此设 f ( n ) f(n) f(n) 表示环大小为 n n n 的操作期望,推一下式子发现很简单
  *B:解法一:看样例找规律,大胆猜想大胆写,要么怂B要么一血
    解法二:每个向量加进来的时候都不属于之前的空间,因此概率为 ∏ i = 0 n − 1 2 n − 2 i 2 n \prod_{i=0}^{n-1} \frac{2^n-2^i}{2^n} i=0n12n2n2i,化简一下可以递推
  C:队友说是沙雕题
  E:若 n n n 为奇数,则 k = 0 , a n s = [ 1 , n − 1 , 2 , n − 2 , ⋯   , n ] k=0,ans=[1,n-1,2,n-2,\cdots,n] k=0,ans=[1,n1,2,n2,,n];否则 k = n 2 , a n s = [ n , n 2 , 1 , n − 1 , 2 , n − 2 , ⋯   ] k=\frac n2,ans=[n,\frac n2,1,n-1,2,n-2,\cdots] k=2n,ans=[n,2n,1,n1,2,n2,]
  G:从左上到右下的副对角线、每条副对角线从右上到左下进行染色,且显然下标为偶数的副对角线,再染下标为奇数的副对角线
  H:数位 dp,设 f i , s x − s y , 0 / 1 , 0 / 1 f_{i,sx-sy,0/1,0/1} fi,sxsy,0/1,0/1 表示从高到低到了第 i i i 位、 a a a 数位和减去 b b b 数位和为 s x − s y sx-sy sxsy a a a 是否小于 b b b b b b 是否小于 n n n,的方案数
  J:预处理出每一轮剩下的数字里要选第几个,然后线段树求出置换
  K:随便 dp 一下
  DFI:

2020牛客多校(第七场)

  ^A:搞一个会 T 的 dp,比如设 f i , x , y , s x , s y f_{i,x,y,sx,sy} fi,x,y,sx,sy 表示现在到了 ( x , y ) (x,y) (x,y) 的位置,放了 i i i 个点,之前的点横坐标和为 s x sx sx,纵坐标和为 s y sy sy,的最优答案。然后打表
  B:队友说是沙雕题
  *C:第一个操作看成全体 + w +w +w 然后把 x x x 丢进一个 multiset 里;第三个操作看成询问某个点到 multiset 里所有点的距离和,链剖解决;第二个操作看成单点询问和单点加法
  D:打表发现只有 1 1 1 24 24 24 是合法的
  **E:设 d p i , ( j , p j ) dp_{i,(j,pj)} dpi,(j,pj) 表示目标树的第 i i i 个结点,匹配模板里的结点 j j j i i i 连向父亲的边匹配 j j j 连向 p j pj pj 的边,的最小代价。转移是个 KM,用最短路快速退流
    看大题解
  *G:先 dp 出一个普通矩形的拓扑序数量,然后第一个矩形倒着 dp,设 f i , j f_{i,j} fi,j 表示第一个矩形上排从右到左到了 i i i、下排从右到左到了 j j j 的方案数,普通的转移是个挡板, f i , i − 1 → f i − 1 , i − 1 → f i − 1 , i − 2 f_{i,i-1} \to f_{i-1,i-1} \to f_{i-1,i-2} fi,i1fi1,i1fi1,i2 特殊地 O ( n ) O(n) O(n) 转移一下(这样的情况只有 n n n 次,不会 T)
  H:必有 n = x k n=xk n=xk n = x k + 1 n=xk+1 n=xk+1,而 x x x k k k 必有其一是 ≤ 1 0 6 \le 10^6 106 的,枚举这一个算另外一个
  *I:答案为一个点的贡献 × n \times n ×n,枚举一个点的度数,用 prufer 序 dp 出方案数
  J:想办法连个图出来,跑足够多次传递闭包
  F:

2020牛客多校(第八场)

  *A:等价于求连通块个数,大力 LCT
  *D: n   m o d   p n \bmod p nmodp 的部分分布在 a 1 , ⋯   , a p − 1 a_1,\cdots,a_{p-1} a1,,ap1,方案为整数拆分;其余部分考虑分在 a 1 a_1 a1 a p a_p ap
    看大题解
  E:枚举 m ⋅ a 1 m\cdot a_1 ma1(枚举总量是 O ( n ln ⁡ n ) O(n \ln n) O(nlnn)),这会对 [ m a 1 + 3 , m a 1 + 2 m − 3 ] [ma_1+3,ma_1+2m-3] [ma1+3,ma1+2m3] 这一段的 n n n 产生一个类似于等差数列的贡献,那么打上差分标记,再求个前缀和,就得到答案了
  G:大力打牌题
  I:视为 a i a_i ai b i b_i bi 连边,每个连通块如果有环那么每个点都能选上,否则恰有一个点不能选
  K:第一问就是 b 1 b_1 b1,第二问贪心选最大的前缀和
  BCFHJ:

2020牛客多校(第九场)

  A:队友说是沙雕题
  B:树形 dp,收益 ≥ \ge 代价的按代价从小到大做,收益 < < <代价的按收益从大到小做
  *C:求“长度平方”即考虑点对的贡献,右点往右移,用线段树维护左点的贡献,这是个区间 × 2 \times 2 ×2 和区间求和
  ^E:推推式子,for 一遍的事 把你骗去写类欧了
  F:简单的滑窗处理
  *G:考场想法:大力树链剖分,没写完不知道行不行
    题解解法:时间分治+可撤销并查集+维护一个连通块的相邻连通块大小之和,相当于连通块在树上的“儿子”之和 + “父亲”
  *H:每个间隔都是形如 1 1 − c x \frac{1}{1-cx} 1cx1 的多项式。分治算出分母,然后多项式求逆
  I:找最小的非 0 0 0 数作为其中一个乘数,剩下的作为另一个乘数
  J: O ( n 3 ) O(n^3) O(n3) 随便搞搞
  K:枚举终点
  GL:

2020牛客多校(第十场)

  *A: × 2 \times 2 ×2 关系会形成很多个环,一个环 × 3 \times 3 ×3 会通向另一个环,因此可以直接贪心 × 2 \times 2 ×2,不行就 × 3 \times 3 ×3
  D:
  E:倒着维护一个单调递增的栈
  J:day7E 弱化 树形 dp 用 KM 转移
  BCFGHI:

2021牛客多校(第十场)

  A:给字符串排序建 trie,trie 上要合并掉单链
  *D:通过直径中心往外加叶子的顺序进行 dp
  *E:六合一很好玩吗 king、Rook 是平凡的,Knight 只需记录离边界的距离,Queen、Bishop 维护 c n t i , j cnt_{i,j} cnti,j 表示有 j j j 侧是 ≥ i \ge i i 的维数。
  F:队友说是沙雕题
  G:如果选定一群人最后或者的话,概率是可以列个式子的,然后再推个容斥系数
  H:按 1 的奇偶性染色
  *J:每个点能照亮的是一段区间,所以是环形线段覆盖,破环为链然后倍增
  *K:枚举竖直方向步数把两维独立,然后每一维用暴力+对称容斥进行根号平衡
  BCI:

2021牛客多校(第四场)

  *A:每个子树的生成函数是儿子的积加上 1 1 − x a i \frac{1}{1-x^{a_i}} 1xai1 再减去前 c i c_i ci
  *B:设 a i a_i ai 表示序列长度大于 i i i 的概率,则 a i a_i ai 的生成函数为 ∏ i = 1 n 1 1 − p i x \prod_{i=1}^n \frac{1}{1-p_ix} i=1n1pix1
  C:假设 a a a 最小,先让三个串开头都是 ‘a’,问题归约成 < 0 , b − a , c − a , n − a > <0,b-a,c-a,n-a> <0,ba,ca,na>,让 s 1 s_1 s1 剩下的全放 ‘b’、 s 2 s_2 s2 剩下的全放 ‘c’、 s 3 s_3 s3 根据限制放 ‘b’‘c’‘d’ 即可
  *D:地方撒
  E:以 1 为根,产生 n n n 个限制,每个限制形如 x ⊕ w i ∈ [ l i , r i ] x \oplus w_i \in [l_i,r_i] xwi[li,ri],这对 x x x 来说有 log ⁡ \log log 个合法区间,所有这些区间覆盖在数轴上,被覆盖 n n n 次的位置就是合法的 x x x 取值
  ^F:无论如何操作对于“点数+边数”都是减少奇数个,因此判断 n + m n+m n+m 奇偶性即可
  *G:考虑组合意义,转化成给 D + n k D+nk D+nk 个有标号球染色,每种颜色至少 k k k 个,的方案数,容斥 dp
  *H:枚举 gcd ⁡ ( j , k ) \gcd(j,k) gcd(j,k) 推式子
  IJ:队友说是沙雕题

2021牛客多校(第二场)

  CDFIK:队友说是沙雕题
  *B:列出式子来,组合数求前缀和用递推
  *G:如果区间 A A A 包含了区间 B B B,那么区间 A A A 要么自成一组,要么与 B B B 同一组(相当于扔掉),因此没有包含关系的区间就是滑窗的,排序,dp
  J:每个质数的贡献单独考虑,是 p ∑ c ( p c 的 倍 数 的 数 量 c ) p^{\sum_{c}\binom{p^c的倍数的数量}{c}} pc(cpc),过程类似埃式筛,要用欧拉降幂
  L:按度数是否 > 2 m >\sqrt{2m} >2m 分为大点和小点,小点更新时将更新信息推送给邻居,每个点询问的时候从小邻居获得更新信息(什么时候超过了自己),从大邻居的预处理中获得什么时候超过了自己
  AEH:

Astar

Astar 2019 复赛

  1001:显然每个节点要么选 l i l_i li,要么选 r i r_i ri
  1002:假设 c ≤ a ≤ b ≤ d c \leq a \leq b \leq d cabd,那么 a − c b − a \frac{a-c}{b-a} baac d − b b − a \frac{d-b}{b-a} badb 必须是整数,且两者二进制下的 1 1 1 恰好错开
  1003:中序遍历,若根最小且左右 s i z e size size 不同,则谁 s i z e size size 小谁先走,否则谁含有标号最小的点谁就先走
  *1004:设 f i , q f_{i,q} fi,q 表示第 i i i 个数,值选在 q ( [ l , r ] ) q([l,r]) q([l,r]) 这个区间时,每一种选法的方案数。区间数量总共是 O ( n ) O(n) O(n)

Astar 2020 初赛(第一场)

  1001 1002 1003 1004:略
  1005:每个黑格子都可以独立算贡献,最终推式子得到答案为 a 1 + a n 4 \frac{a_1+a_n}{4} 4a1+an
  1006:二分第 k k k 小的权值,然后算小于等于这个权值的点的权值和,再减去多的
  *1007:二分时间 t t t,于是所有格子按照“能到达哪些窗户”分为 2 k 2^k 2k 类,算出每一类的数量,网络流判一下
  *1008:powerful number
    看大题解

Astar 2020 复赛

  1001: m − ( 100 m p − 1 ) q 100 m-(\frac{100m}{p}-1)\frac{q}{100} m(p100m1)100q
  1002:+1 只能用一次,枚举用来 +1 的前缀
  1003:最大值:每 l l l 个数,最后的 k k k 位倒序放最大的。最小值同理
  *1005:解法一:Alice 的 m m m 次攻击视作 m m m 个挡板,那么每个间隙都是一个生成函数。最后要泰勒展开,不能上多项式板子
    解法二:dp 推一推,是个简单的组合数计数
    看大题解
  1004 1006:

Code+

Code+第七届

其他

学军信友队趣味网络邀请赛

  A:在这里插入图片描述
  B:方法一:点分
    方法二:直接每个点找一个离它最远的点(在直径上)算答案即可
  *C:区间 dp,先用完全背包算出 d x d_x dx 表示走 x x x 距离的最小花费,然后 dp 时一个区间的转移必然要转移到这个区间被划分开,因此有用的区间一定是一个段的前缀或后缀,因此有用的区间是 O ( n ) O(n) O(n)
  D: h m = h_m= hm=最大的 2 k 2^k 2k 使得 2 k ∣ m 2^k|m 2km。枚举 2 k 2^k 2k 算贡献,转化成求 [ 1 , n ] [1,n] [1,n] 每个数的约数个数和,分块+卡常

第三届上海理工大学程序设计竞赛

  ABC:队友说是沙雕题
  ^D:一条边 ( x , y ) (x,y) (x,y) 的权值等价于 m a k e _ p a i r ( max ⁡ ( x , y ) , min ⁡ ( x , y ) ) make\_pair(\max(x,y),\min(x,y)) make_pair(max(x,y),min(x,y)),因此 MST 也是唯一的
  E:Dijkstra 求出排列 [ 1 , 2 , ⋯   , 8 ] [1,2,\cdots,8] [1,2,,8] 到其他排列的最短路,然后对于原序列,枚举一种置换,算答案
  *F:构造 k = 1 k=1 k=1 的时候 ( 2 , 2 × 3 , 5 , 3 × 5 ) (2,2\times3,5,3\times 5) (2,2×3,5,3×5) k > 1 k>1 k>1 的时候把这个东西复制 k k k 份,然后修正,即每组的 2 × 3 2\times3 2×3 不能抢后面的 5 5 5、每组的 3 × 5 3\times5 3×5 不能抢后面的 2 2 2
  G:单调栈
  H:每个格子的贡献取决于最后一次修剪
  *I:prufer 序 dp,初始连通块缩起来当一个点考虑
    看大题解
  *J:询问所有的 2 × 2 2\times2 2×2 2 × 3 2\times3 2×3 3 × 2 3\times2 3×2 即可知道任意一对相邻格子是否相等
  *K: k = 2 k=2 k=2 时,维护奇数位一棵 treap 和偶数位一棵 treap,操作一个区间相当于两棵 treap 互换子树; k = 3 k=3 k=3 时同理,维护 6 棵 treap 即可
  L:只需最后两位是 4 的倍数即可。注意 corner case
  M:插头 dp,一个格子有 4 种状态(石头、水、没水的甘蔗、有水的甘蔗)

福州大学第十七届程序设计竞赛

  ABCDEF:略
  I:先挖掉一种颜色,剩余两种颜色合并连续段,则只有 O ( n ) O(n) O(n) 种情况,然后组合数算一下方案数
  *J:可删除线性基求交
    看大题解
  GH:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值