学校 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 是

\[(2e^{Ax}-1)^u (e^{Ax}+e^{(A+1)x}-1)^v (2e^{(A+1)x}-1)^w e^{(R/P)x} \]

已经可以快速算了,此时可以 \(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\) 次就够了。

posted @ 2026-03-12 13:30  Xuan_tmp  阅读(44)  评论(0)    收藏  举报