W
e
l
c
o
m
e
: )

2021 暑假萌萌 200 道

done

\(n^2\) 模拟对局之后用 upper_bound 加快查找顺序;

很有意思的一道恶臭找规律题,+/- 相当于本身计算方法并且强制改变后面一个数,让它最高位 +1 为 ('+/-'-'0');

拆成两个一样的问题之后上背包即可;

标准数位 DP 型,拆成 \(\log\) 个格子之后暴力填,复杂度戳这

注意到一堆乘法要用高精,不妨把它拆分多个素数,根据 \(\gcd\)bug特性去写个单点修改维护 \(\min\) 动态开点\(\text{Segment-Tree}\) 即可;

倍增+并查集应用,具体就是拆成块长为 \(2^j\) 的块进行并查集路径压缩。

第一问模板,第二问具体分讨推一波。

神仙构造,设 \(\sum_{i=0}^{INF-1} f(i) \equiv p (\mod a)\),则有 \(\sum_{i=1}^{INF} f(i) \equiv p-f(0)+f(0+INF) \equiv p+1 (\mod a)\),类似可推得 \(\sum_{i=a-p}^{INF+a-p-1} f(i) \equiv 0 (\mod a)\)\(p\) 由定义递推出得 \(81 \times INF\) 后就珂以做了。

两道题一样,经典的树形 DP,设 \(f_{i, 0/1/2}\) 为用儿子的/用父亲的/用自己的 推一波即可。

完全不需要通项公式,转化一下即可,过程类似于 ksm 的思想连加。人生苦短,我用 Py

很明显有以下定理:

若三个点 \(u,x,v\) 满足 \(u \to x\) 有一条左括号边并且 \(x \to v\) 有一条右括号同类型边,那么这三个点构成一个合法路径;
显然楼上那个定理满足可并性;
直接上这是 l 这是 r 这些边我不加(小声),这些边我不加(震声),暴力怎么做?暴力是不是,加边!加边!加边!并查集查询,搞完之后普通计数。

新的直径只会在 \((u, v)\) \((u, s_1)\) \((u, s_2)\) \((v, s_1)\) \((v, s_2)\) \((s_1, s_2)\) 出现,直接上倍增即可。

标准拆位题,拆完之后上线段树,异或相当于区间取反。

比较仙,考虑每一种长度的结点的贡献,分讨,贡献分两种:

只存在单个区间内的,这个用记忆化
跨区间的,记 \(l_n\) \(r_n\) 分别为 \(1,n\) 的贡献,发现总贡献正好事 \(l_n \times len_{right} + r_n \times len_{left} - 1\),而 \(l_n=l_l+l_r+r-1\) \(r_n\) 同理。

枚举右端点,发现最大的 x 只增不减,直接暴力枚举一遍更新,复杂度 \(O(np)\)

柿子转变为 \(d \times (n + \sum_{i=1}^{n} [\frac{a_i-1}{d}]) \le k + \sum_{i=1}^{n} a_{i} [\ ] \text{为向下取整}\),枚举 \([\ ]\) 内的东西套整除分块就珂以做了。

\(f_{i, S, c}\) 表示第 \(i\) 行为 \(S\),总共放 \(c\) 个的总方案数,\(f_{i, S, c}=\sum_{T \dagger S} f_{i-1, T, c-cnt[S]}\)\(T \dagger S\) 表示 \(T\)\(S\) 互斥,简单 DP 即可。

考虑求其补集,不难想到珂以转化为 \([l+1, n-r]\) 的人一样,(注意有这个区间的人不超过区间长度),长度一样的转变为以个权值,这样问题变为:

给出多个带权值的区间,选出权值最大且无相交的几个区间
这是个简单的 trick,珂以 \(O(n\log n)\) 解决。

单向边取反集变为双向,问题变为分成两组互无连边的点集,直接 dfs 后 dp 即可。

不难想到各种钞票之间相互独立,设 \(f_{i, A, B,C}\) 为第 \(i\) 面值钞票,三人手上的金额,考虑用 \(f_{i-1, A, B, C}\) 去推 \(f_i\) 层的,由于不能枚举 \(f_i\) 的总状态,我们只要考虑 \(f_{i-1, A, B, C}\) 珂已转移到哪里,不难想到珂以枚举转移的钞票数量(注意珂以反向转移,因此枚举上限应该是 \(i\) 层的总钞票量),不难写出:

\[f_{i, \text{可转移的位置}}=\min{f_{i-1, A, B, C}+val} \]

发现总金额一定,所以珂以丢掉第四维。

二分图充要条件为不存在奇环,那么所要找的边一定事删去后不存在奇环的边,因此可知它被所有奇环覆盖,且不能被偶环覆盖,简单树上差分即可。

简单 \(\text{2-Sat}\) 模板。

考虑到树内交换子树并不会对先序遍历中树外部分形成任何逆序对,即:每次交换都是独立的,类似于归并排序,我们考虑如何计算每次交换前和交换后的逆序对数量,逆序对数量无非三种情况:

  1. 二数都在左子区间内 2. 都在右子区间内 3. 跨区见
    由于每次分叉需要合并两棵子树,不难想到使用线段树合并解决问题。

建反边上 dfs 即可。

发现一堆递减的数只有最后一个数有用,将其压成一个单调递增的数列,正着不好写考虑倒推。设 \(f_i\) 为结果序列是操作 \(i\) 后序列的多少倍,将 \(a_i\) 拆成 \(\left \lfloor \frac{a_i}{a_{i-1}} \right \rfloor + a_i \% a_{i-1}\),前者很容易做,后者二分即可,复杂度 \(O(n \log^2 n)\)

简单 ssh 即可

直接插入一个当前最小数的两倍于此小数中的最大值即可,最终剩下的就是 ans。内存没开大 WA 了 114514 发。

点数很少直接暴力连边,跑匈牙利算法即可。

简单 DP。

\(win_i, fail_i\) 分别为在 \(i\) 结点 胜利/失败 最少需要多少结点,显然输的时候需要全部子结点都赢,赢得时候只需要一个子节点输。计算完之后统计多少个结点正好需要需要一个子节点全输即可。

线段树暴力合并。\(Solution\)

转换题意后简单树剖。\(Solution\)

找出性质后 DP 即可。\(Solution\)

又是一个算法本质思维题,要求字典序最小,只要倒序跑匈牙利就能保证。(因为匈牙利匹配会修改前面的而不是当前的完)


35


暴力拆点后跑匈牙利即可,这输出格式有点怪。。。

显然安全的关系需要满足环内没有夫妻边,简单缩点即可。

最小点覆盖板子。

找到 0/1 要素后连边,最小点覆盖。

同上。

同上。

记录 \(f_{i}\) \(i\) 天的最小花费,暴力把在 \([l,r]\) 天都珂以行走的最短路,简单 DP 即可。

  • K=0,显然每个边都要走两遍;
  • K=1,直径上每一个点只走一遍显然最优;
  • K=2,对于所有的情况,都珂以转化成直径+某一条链(虽然有些不能转化,但珂以对比出直径更优),因为重叠的边只计一次,把第一次直径上的边取 -1,再求一次直径,\(ans=2*(n-1)-(L1+1)-(L2+1)=2*n-L1-L2\)

\(f_{l,r, x}\) 为是否能合并 \([l, r]\) 成字符 \(x\),暴力 DP 即可。

考虑如何推错排数,计 \(S_n\) 为方案数,显然第一个有 \(n-1\) 种选择,若第二个为一选的数则加上 \(S_{n-2}\),否则是 \(S_{n-1}\),即 \(S_n=(n-1)(S_{n-1}+S_{n-2})\)

答案为 \(C_{n}^{m} \times S_{n-m}\)

杨辉三角暴力,对 k 去 mod 为 0 即能整除,简单递推计数即可。

搬到序列上谁都会,既然需要求最前填 \(0/1\) 的值,并且最终值只有 \(0/1\) 暴力在线段树上维护数组 \(f[L/R][0/1]\) 表示填 最前面/最后面(因为在树上,所以要从两个方向记)为 \(0/1\) 得到的值。

考虑线段树上怎么合并,显然若 \(f_{k, L, 0}\) 为 1 只有两种可能:\((f_{ls, L, 0}=1\ \text{and} \ f_{rs, L, 1}=1)\) \(\text{or}\) \((f_{ls, L, 0}=0\ \text{and} \ f_{rs, L, 0}=1 )\) (因为你肯定是要 \(ls\) 最左值为 \(0\) 的,那么 \(f_{ls, L, 0}\) 对应值放到 \(rs\) 的下标找即可。)

这样做是 \(O(qk\log^2n)\) 的(会被卡常),在线段树上用一个 unsigned long long 压掉就能做到 \(O(q(k+\log^2n))\) 了。

\(f_{i, j}\) 为只利用前 \(i\) 个垃圾、时间为 \(j\) 所能到达的最大高度,暴力 DP 即可。

同 P4071

先假定一个点为初始点,以它为根向下拓展。

\(f_{x}\) 为以 \(x\) 为根的子树对答案的贡献,考虑它的儿子对其的贡献,肯定是儿子的子树拍成序列后插入之前的儿子形成的序列,即 \(C_{size[before]}^{size[v]}\)

换根做 \(n\) 次加法原理,答案记得减半,因为一条边连到的两个点会算重。

我们枚举最大公约数 \(d\)\(d\) 多大才会有解?肯定是 \(\frac{d(d+1)}{2} \le n\) 才有(相当于 \(1-d\) 可行),这样 \(d\) 就在 \(\sqrt{n}\) 范围内了。

\(n= \prod_{i=1}^{m} p_i^{c_i}\)\(p_i^{c_i-1}\) 一定可行(前提是 \(p_i^{c_i-1} \le \sqrt{n}\)),直接暴力除掉然后构造一个长度为 \(k\) 、严格递增及和为 \(\frac{n}{p_i^{c_i-1}}\) 的数列即可,注意首先满足公约数最大,注意枚举顺序。

线段树上哈希。

神仙构造。

将上一部影片的价值标负,并将上上部价值标零,问题转为全局最大连续子段和。

exgcd 板子。

垃圾单调性质题。

显然垃圾 DP。

莫 比 乌 斯 反 演 基 础 练 习 题

按房子位置排序后,肯定会顺路把能收的收了,因此如果我抓完了区间 \([l, r]\) 内的精灵,我必然在端点处,设 \(f_{l, r,T, 0/1}\) 为在 \(T\) 时刻处理掉 \([l, r]\) 内的精灵且最后位于 左/右 端点的最大价值,简单 DP 即可。

\(v\times m^2=m\sum a_i^2-(\sum a_i)^2=m\sum(sum_i-sum_j)-S^2\),我们只需要让 \(\sum\) 内的东西尽量小,设 \(f_{i, j}\) 表示第 \(i\) 天走了 \(j\) 段则有 \(f_{i, j}=\min_{i-1 \le k <j} f_{i-1, k}+(sum_j-sum_k)^2\) 斜优板子。


60


发现答案与切割顺序无关后直接暴力 DP + 斜率优化即可。

边权为 \(1\) 那么 最短路 = 点数,对三个点分别跑最短路之后取 \(\min\)

\(\frac{1}{n}+\frac{1}{n+1}+\frac{1}{n(n+1)}=\frac{2}{n}\) 小学知识。

显然贪心胡乱分配即可。

\(ans=\max(a_{n-2}, a_n\%a_{n-1})\),注意离散化后特判。

交换相邻位置会 \(+2\),加到 \(2k\) 就好了。

只有 1 会影响结果,分讨后就是 nim 板子。

感觉都比较套路,T10 板子,T1 对于时间拆点,T2/5 对于爆炸问题新增一个新节点就能解决,T3 典型边转点,T4 对周期下手,T6/7/8/9 推出柿子后没难度,

扫描线板子,把每个矩形压成一条线算贡献。

为什么这玩意会有模板题》

莫队板子。

\(f_i\) 为选取前 \(i\) 个数需要的最多划分数,显然 \(f_i=\max_{j<i} f_{j-1}+1 \wedge \gcd(a_i,a_j)>1\),对于每一个质因子开权值线段树,珂以艹过去。

考虑性质后上 ST 表。

感人的数据范围。

比较经典的贪心构造。

ABC 日常被 CF 吊打(,显然对于每一条边按边权排序就能丢掉 \(\max \min\) 了。

没事做做莫反愉悦身心(T4 虽然不是莫反但是莫反做熟了自然也会 l/d, r/d 了

T1 需要卡常,对质数连边后再优化建边跑二分图,T2 跑两个二分图(不知为啥被 hack 了,待研究)

因为上面正解是网络瘤就来学了(

大力找性质,不难发现可拆分成两个单调的序列,且前头最小值大于后面最大值,依照这个性质,设第二维为最小值,DP 即可。

  • CF1270

\(\text A\) 简单贪心,\(\text B\) 没有要求最大且元素不同只要找相邻位置即可(因为如果一个个序列里的子序列必然是满足要求的),\(\text C\) 人类大智慧 \(2\times Xor= sum'+Xor'+Xor'+sum'\)\(\text D\) 是个小学奥数题,\(\text E\) 把点分类成 \((0, 0)(0, 1)(1, 0)(1, 1)\) 四类即可。

大眼观察操作二,发现本质上是对操作一的拆分,猜一手循环节为 \(a+1\) (因为 \((a-1)(a+1)=a^2-1\)),之后就是博弈论递归了,层数为 \(\log\)

膜你赛题,做后缀异或值,关键点共 \(20\) 个,显然状压 DP。

考虑如何使得每一对路径都被找到,因为不同点编号 \(x,y\) 二进制下必然有一位不同,所以枚举每一位二进制分组跑最短路。

背包 DP + 长链剖分优化。

考虑每个节点的贡献,显然答案是 \(\sum \frac{1}{dep_i}\)

到了边界就没用,所以二分期望,把边界都设成 \(mid\),剩下简单期望 DP。

posted @ 2022-09-13 15:29  127_127_127  阅读(64)  评论(0编辑  收藏  举报