学校 3.15
开始写这篇记录的时候是 3 月 12 日,我们学校不知道是诺如还是什么反正停课上网课了,不过对我来说没啥差别只是在机房换到了在家,依旧是机房孤寡选手。
首先是伟大的模拟赛!
A
有 \(2n\) 个格子排成一排,每个格子有一种颜色,颜色编号 1 到 n,每种颜色的格子恰好两个。
现在你需要在每个格子中写入一个左括号或右括号。颜色相同的两个格子内的括号必须相同。最后格子中的括号从左到右会形成一个括号串。你需要保证这个括号串是一个合法括号串,且是所有满足条件的合法括号串中字典序最小的(左括号小于右括号)。
请你判断是否有解。若有解,请你输出最后得到的括号串。
先钦定所有括号都是 ),从左往右贪心改一对左括号为右括号并检查是否非法(后缀 \(>0\)),这个可以随便用线段树做一下。最后检查整个串是不是合法的,就结束了。
考虑这坨东西为什么是对的?
看最终的序列,如果存在 \(a<c,b<d\) 满足 \((a,b)\) 是 ) 而 \((c,d)\) 是 (,那么交换一定不劣且合法。如果 \(a<c<d<b\) 满足 \((a,b)\) 是 ) 而 \((c,d)\) 是 (,那么交换匹配其实等价于从左往右扫的时候先检查 \((a,b)\) 换成 ( 是否合法。
然后就做完了。
\(n\) 写成 \(2n\),\(-50\),玉玉症了。
B
生成函数!哦哦的耶。
所以正赛没考的数数题在这里考了吗,为什么正赛不给我放数数和哈集幂!!!
哦其实是放了的但是是签,然而秒掉了签子然后认为正解不是正解然后 -68,哦哦哦。
EGF 我喜欢你。
只要计算每个数在多少个序列中会被生成出来。正难则反就是不会被生成出来。
\([1,R]\) 可以直接变成 \([0,P)\),每个数有若干种选法。\(x=0\) 是弱智,考虑 \(x\neq 0\)。由于每个 \(1\le a<P\) 都有一个乘法逆元,所以等价于对于一个 \(x\) 有若干对无交集的数对,同一对中的两个数不能同时出现。然后这个东西可以对每一组限制单独考虑最后卷积,此时可以 \(O(n^2P^2)\)。
然后我们发现每个数的选法数量只有 \(2\) 个,本质不同的子问题只有 \(3\) 个!于是我们设有 \(u\) 个 \((A,A)\),\(v\) 个 \((A,A+1)\),\(w\) 个 \((A+1,A+1)\),答案的 EGF 是
已经可以快速算了,此时可以 \(O(n^2P+P^2)\)。
之后很难再优化,但是发现不同的 \((u,v,w)\) 其实不多,好像只有根号个左右?所以预处理出三个式子的幂次,就可以 \(O(n^2 \sqrt{P})\) 了。
怎么被卡飞了?哦怎么原题放了 3s 校内只开了 1s 啊,校内机子还比洛谷垃圾,坏完了。
C
给定一个 \(n\) 个点 \(m\) 条边的带边权无向图和一个长为 \(n\) 的序列 \(\{a_n\}\)。设 \(f(x,y)\) 表示 \(x\) 和 \(y\) 之间的最小割,求 \(\sum_{x\neq y}a_xa_yf(x,y)\)。
\(n\le 5\times 10^5,m\le n+24,a_i\le 10\),边权不超过 \(10\)。
结构是一棵树和若干条返祖边。考虑扔掉度数为 \(1\) 的点,把所有度数为 \(2\) 的点缩成一条链,于是最多剩下 \(48\) 个点和 \(72\) 条边。
咕。
QOJ1171 Integer Array Shuffle
有一个数组 \(A\),一次操作定义如下:
取一个空数组 \(B\),每次将 \(A\) 的左或右端移除一个元素并插入到 \(B\) 末端,\(A\) 为空时用 \(B\) 替换 \(A\)。
给定长为 \(n\) 的数组 \(A\),求将 \(A\) 排序所需要的最小操作数。
\(n\le 3\times 10^5\)
相邻的相等元素可以忽略,把序列划分成递增子段和递减子段,分别标成 0,1,于是得到了一个 01 串。而考虑每次合并头尾两个字符,如果都是 0 或者都是 1,那么可以归并成开头的一个 0 或 1。如果一个 0 一个 1,那么去掉开头的第一个字符,剩下的就是一个 01 交替的回文串。因此每次操作都可以把 01 串的长度减半。所以只需要统计原来 01 串的长度即可,复杂度线性。
QOJ4996 Icy Itinerary
有一张 \(n\) 个点 \(m\) 条边的图,求是否有一个排列 \(a_n\) 满足至多有 \(1\) 个 \(2\le i< n\) 满足边 \((a_{i-1},a_i)\) 与边 \((a_{i},a_{i+1})\) 中有且仅有一条存在。
\(n,m\le 3\times 10^5\)
考虑初始的链为 \(\{ 1\}\),每次加入一个点 \(u\),当前满足条件的分界点为 \(i\)。不妨设存在边 \((a_{i-1},a_{i})\),如果存在边 \((u,a_i)\) 则把 \(u\) 插入到 \(a_i\) 和 \(a_{i+1}\) 中间,如果没有则插入到 \(a_{i-1}\) 和 \(a_i\) 中间,显然链还是合法的,按照这个方式构造即可。
QOJ5096 千百
很牛的题!!但是咕了。
QOJ5568 Cyclic Shifts
给定一个长度为 \(n\) 的排列 \(p\),每次操作可以选择一个 \(0<k\le n\) 并选择 \(k\) 个元素 \(p_{x_1},\cdots,p_{x_k}\),将这些元素向右循环移位一格,代价为 \(\frac{1}{k}\)。
要求在 \(2\) 的代价内给数组排序。
\(n\le 5000\)
取 \(n-1\) 个数循环移位相当于将没取的那个数左移一位,由此可以在一次操作中将不相邻的数各自向左移位,代价不超过 \(\frac{2}{n}\)。这样的操作最多进行 \(n\) 次,而且肯定有无法用满 \(\frac{2}{n}\) 代价的时候,于是可以在 \(2\) 的价值内将数组排序。
QOJ5095 九王唱
和千百一样牛,一样咕。
P4557 战争
闵可夫斯基和,做过的题,不是很想写题解啊,那就不写了。
P10630 [JOI Open 2017] 推土机 / Bulldozer
CF1359F RC Kaboom Show
发现只要有两条线不平行就一定有解,可以判掉无解。
考虑二分答案,现在有一个时间 \(t\),求是否可以在 \(t\) 时刻内让两辆车相撞。发现这个问题等价于画出所有小车在 \(t\) 秒内经过的线段,求是否有交点。
考虑如何判断线段之间有交点。使用扫描线,按 \(x\) 从小到大扫,每个线段拆成插入和删除。每次扫到一个 \(x=x_0\) 时,将所有线段按照与 \(x=x_0\) 交点的纵坐标排序,每次加入一条线段时,找到上下与其相邻的两条线段,判断加入的线段和这两个有没有交。删除同理,找到相邻的线段,画图可以证明正确性。
初始二分上下界为 \(0\) 和 \(10^{12}\),二分 \(70\) 次就够了。

浙公网安备 33010602011771号