Codeforces2700泛做

学习一波子达哥
CF995E Number Clicker
知识点:gcd 逆元 随机化 乱搞
状态:看题解完成
做法:这个题看上去就不像是正常题,所以我们应该想一些玄学做法。考虑让 \(x=\frac{a}{b}\),那么操作2可以变成 \(\frac{a-b}{b}\),操作3可以变成 \(\frac{b}{a}\),这实际上是求gcd的方法,但是这样的复杂度是无法保证的,因为并不是 log,但是计算路径长度是可以 \(\mathcal O(\log p)\) 搞的,所以我们每次随机一个 \(b\),如果路径长度在100以内,就记录一下路径即可
CF1137E Train Car Selection
知识点:凸包
状态:自己独立完成
做法:看到这个修改大概能猜到用凸包来做。如果遇到一个操作1那么就直接凸包清空,答案就是1 0,如果操作2相当于加入一个点,如果是操作3相当于会把凸包往上方翘一下,直接把递增的部分删掉即可
CF838D Airplane Arrangements
知识点:找规律 数学
状态:自己独立完成
开始先打了个表看出来了柿子 \(2^m(n-m+1)(n+1)^{m-1}\)
严谨的证明是,发现如果我们在前门和后门中间设计一个虚拟点,把飞机接成一个环,那么每个人相当于随便选一个点顺时针或者逆时针行走,如果虚拟点被占了就是不合法的
因为转一下之后同样也是合法的,所以每个点被占据的概率是相同的,都是 \(\frac{n-m+1}{n+1}\),乘上 \((2(n+1))^m\),不难发现和上面那个柿子是等价的
CF1044F DFS
知识点:线段树
状态:自己独立完成
不难发现如果新连上了一条边,那么在 \(x,y\) 子树外面的点都不能是起点,\(x,y\) 子树里的都还可以
如果 \(x,y\) 是父子关系情况类似
因此可以利用线段树来进行维护
此题应该没有*2700(
CF1264E Beautiful League
知识点:网络流
状态:看题解完成
首先看到一个三元环,这个东西按照套路想到容斥。考虑统计不满足条件的个数,发现这样的环存在的条件是三个点中有一个点的出度为2
所以不满足条件的就是\(\sum\binom{oude_i}{2}\)
我们现在要最小化这个东西,看到这个四不像的复杂度所以考虑网络流。
边放在左边,如果已经确定方向直接连那个点,否则两个点都连上。
右边的点到 \(T\)\(n\) 条,每条 \(\binom{i}{2}-\binom{i-1}{2}\) 的,这样肯定会优先跑小的边,最后跑mcmf即可
CF1519E Off by One
知识点:建图 贪心
状态:看题解完成
首先考虑把所有可能走到的斜率离散化一下,然后把每个 \(k_{(x+1,y)}\)\(k_{x,y+1}\) 连边,这样会形成若干连通块,设每个的大小为 \(siz_i\)
不难猜到答案是 \(\sum siz_i/2\),构造方案的话就先整出来一棵生成树,对于不在生成树上的边如果有公共顶点就配对,否则每个点最多只会剩下一条边,直接贪心即可
CF1369F BareLee
知识点:博弈论
状态:自己独立完成
这个题就考虑如果先手想赢能不能赢,用 W 点 L 点画一画大概能看出来规律,同理想输能不能输
然后不难想到可以利用倒推判断有没有必胜策略
假设 \(n+1\) 位置是 Bob 先手,即 Alice 赢了,进行倒推
\(f[i][0]\) 是可以到达的状态中的或,\(f[i][1]\) 是可以到达状态中的与
CF1553G Common Divisor Graph
知识点:数论 并查集
状态:自己独立完成
第一遍想错了浪费了很多时间。。。其实这题非常简单,大概没有2700的难度
把所有质因数看成点,\(a_i\) 的所有质因子都在一个连通块内,注意到 \(a_i\)\(a_i+1\) 是互质的,所以一次操作相当于是 \(a_i\)\(a_i+1\) 的质因子和 \(a_i+1\) 自己的质因子之间连边
所以先并查集预处理连通块,然后注意到一个数最多有 7 个不同的质因子,用哈希表维护一下操作可能连得边,一次操作最多会连49条,空间非常轻松
查询的时候就相应判断能不能0能不能1否则就是2
CF1408G Clusterization Counting
知识点:kruskal重构树
状态:看题解完成
\(f(x,y)\) 表示 \(x\to y\) 的路径中经过最大边权最小的路径的最大边权
那么这个条件相当于是 \(\forall x,y\in S,forall z\not\in S,f(x,y)<f(x,z)\)
这个式子就是kruskal重构树的经典形式了
不难发现可以建出kruskal重构树,然后一个子树必须属于同一个集合,直接在dfn序上dp即可
CF1182F Maximum Sine
知识点:乱搞
状态:自己独立完成
相当于是在 \([a,b]\) 里面找一个 \(k\),使得 \(kp\bmod q\)\(\frac{q}{2}\) 尽量的接近
观察数据范围不难猜出复杂度是 \(t\sqrt\) 的,所以先预处理出来 \(1\cdots \sqrt q\) 的模的值,每次枚举分块的左端点可以找到离 \(\frac{q}{2}\) 最近的点
CF1491F Magnets
知识点:构造
状态:自己独立完成
加入我们找到了一个有磁性的,那就非常好办了
否则我们每次把 \(i\) 放一边,前面的放一边,等第一次不是零的时候这个位置就是第二个有磁性的,用这个继续检验后面的就可以判断后面的
下面的问题是第一个有磁性的在哪,从问法里就能看出,我们可以直接二分找第一个
CF1450E Capitalism
知识点:差分约束
状态:看题解完成
这题其实没太搞懂,希望子达鸽鸽能够爆切一下
确定方向得边差分约束非常简单,不确定的我们 \((x,y,1),(y,x,1)\) 连,这样这两条边的差分经过限制之后只能是 \(-1,0,1\),如果是 \(0\) 就是存在奇环那么肯定怎么连都不行直接 NO
否则这就是一组可行解,到这里都没有什么问题
但是为什么从每一个点出发都找一个极差最大的就可以呢
CF1149C Tree Generator™
知识点:线段树
状态:看题解完成
这题真的是nt了。。。明明推出了情况但是没想出来可以线段树维护。。。
思考一下树上莫队为什么是对的,可以发现这个相当于让我们求 区间没匹配的括号个数
发现没匹配的括号一定是)))(((这样的
所以 \([l,r],x\in[l,r]\),找最大的 \(s[r]-s[x]+s[l]-s[x]\),也就是后一段的和减前一段的和最大
我们维护 前缀/后缀min/max,前缀/后缀/整个区间的那个东西的最大,和区间的子区间中这个东西的最大
就可以维护了
实际上后缀max和前缀min没用

posted @ 2021-11-28 14:48  YuukiYumesaki  阅读(132)  评论(1编辑  收藏  举报