ZROI 19.08.11模拟赛

传送门

写在前面:为了保护正睿题目版权,这里不放题面,只写题解。



dlstql,wsl


  • A

\(10pts:\)

\(a=100,T=100\),对每个排列构造一个反的,一步到位即可。

\(20pts:\)

\(a=50\),构造\(1\)和所有元素交换的排列,实现交换\((v,u)\)可以令两者分别与\(1\)交换,选择排序即可。

\(40pts:\)

\(a=30\),构造前\(25\)个元素与\(1\)交换的排列,另有一个排列交换前\(25\)个与后\(25\)个元素。

\(a=20\)时可以分三块处理。

\(100pts:\)

考虑\(a=2\),步数不限时怎么做。

只需构造一个\(2-n\)的环,再构造一个\(1-2\)的交换。

每次可以把位置\(1\)上的数放到它在循环里的对应位置。

但是一步的期望是\(\frac{n}2\)次操作,实际步数无法承受。

考虑倍增。由于\(a=5\)的限制,难以二进制倍增,可以考虑三进制倍增。

【update:经过同学们反映,必须用dls的\(\{1,3,8,20\}\)才能获得满分】

一步的期望大约是\(4.5\)次操作,随机数据下可以通过。


  • B

欣赏一下swk的神奇错误:

\(\frac{1}n \sum(a_i-\frac 1n \sum a_i)^2=\frac{1}{n}(\sum a_i^2+\frac{(1-2n)(\sum a_i)^2}{n^2})\)

/cy/qiang

显然方差直接算是不可做的,考虑拆一下式子。

\(\frac{1}n \sum(a_i-\frac 1n \sum a_i)^2=\frac{1}{n}\sum(a_i^2-\frac {2a_i}n\sum a_i +\frac{1}{n^2}(\sum a_i)^2)=\frac 1n (\sum a_i^2-\frac{1}n (\sum a_i)^2)\)

即,对于一个确定的大小为\(n\)的集合,它的方差为\(\frac 1n (\sum a_i^2-\frac{1}n (\sum a_i)^2)\)。

如果只需要算一个方差,有上式就够用了。然而此处我们要算的是区间内所有子集的方差。

\(\frac 1n (\sum a_i^2-\frac{1}n (\sum a_i)^2)=\frac{n-1}{n^2}\sum a_i^2-\frac{1}{n^2}\sum_{i\not=j}a_ia_j\)

设每次求取区间长度为\(l\),枚举子集大小\(n\),考虑区间内每个\(a_i\)单独出现的次数,即\(l\)个数中选\(n\)个,其中\(a_i\)必选的方案数,等价于\(l-1\)个数中选\(n-1\)个的方案数。

同样,区间内每对\(a_i,a_j\)出现的次数为\(l-2\)个数中选\(n-2\)个的方案数。

由此得到长度为\(l\)的区间所有子集的方差和\(=\sum_{n=1}^{l}\frac{n-1}{n^2}(^{l-1}_{n-1})\sum a_i^2-\sum_{n=1}^l\frac{1}{n^2}(^{l-2}_{n-2})\sum_{i\not=j}a_ia_j\)。

发现枚举\(a_i,a_j\)比较困难,重新将其转化为完全平方的形式,得到\(\sum_{n=1}^{l}\frac{n-1}{n^2}(^{l-1}_{n-1})\sum a_i^2-\sum_{n=1}^l\frac{1}{n^2}(^{l-2}_{n-2})[(\sum a_i)^2-\sum a_i^2]\)。

整理得\(\sum a_i^2 \sum_{n=1}^l [\frac{n-1}{n^2}(^{l-1}_{n-1})+\frac{1}{n^2}(^{l-2}_{n-2})]+(\sum a_i)^2\sum_{n=1}^l\frac{1}{n^2}(^{l-2}_{n-2})\)。

发现原式被拆分成了形如\(x_l\sum a_i^2+y_l(\sum a_i)^2\)的形式,且\(x_l,y_l\)与序列形态无关,只与序列长度有关。现在原问题转化为两个子任务:维护区间和,区间平方和;迅速求解\(x_l,y_l\)。

第一个子任务可以用线段树简单维护。

将\(x_l\)拆分成三部分:①\(\sum_{n=1}^{l}\frac{1}{n}(^{l-1}_{n-1})-\)②\(\sum_{n=1}^{l}\frac{1}{n^2}(^{l-1}_{n-1})+\)③\(\sum_{n=1}^{l}\frac{1}{n^2}(^{l-2}_{n-2})\),则\(y_l\)是\(x_l\)的一部分。考虑分别求解。

①:\(\sum_{n=1}^{l}\frac{1}{n}(^{l-1}_{n-1})=\sum_{n=1}^{l}\frac{(l-1)!}{n!(l-n)!}=\sum_{n=1}^{l}\frac{1}{l}(^l_n)=\frac{2^l-1}{l}\)(注意\(n\)的枚举从\(1\)开始)

②:\(\sum_{n=1}^{l}\frac{1}{n^2}(^{l-1}_{n-1})=\frac 1l\sum_{n=1}^{l}\frac{1}{n}(^l_n)\),发现不是很好求解,可以使用差分的技巧。设\(P_l=\sum_{n=1}^{l}\frac{1}{n}(^l_n)\),则\(P_{l+1}-P_l=\frac 1{l+1}+\sum_{n=1}^{l}\frac{(^{l+1}_{~~n})-(^l_n)}{n}=\frac 1{l+1}+\sum_{n=1}^{l}\frac{1}{n}(^{~~~l}_{n-1})=\frac{1}{l+1}(1+\sum_{n=1}^l(^{l+1}_{~~~n}))=\frac{2^{l+1}-1}{l+1}\)

③:\(\sum_{n=1}^{l}\frac{1}{n^2}(^{l-2}_{n-2})=\frac{1}{l(l-1)}\sum_{n=1}^l\frac{n-1}{n}(^l_n)=\frac{1}{l(l-1)}(2^l-1-\sum_{n=1}^l\frac{1}{n}(^l_n))\),发现与②式形式相同,可以简单处理。


  • C

dls:昨晚睡迷糊了,所以写了两份错的题面。

\(50pts:\)

按右端点排序dp,考虑需要记录哪些状态。

发现需要记录:未被覆盖的区间中,右端点最靠左的;选中的区间中,右端点最靠右的。维护这两维状态,转移时枚举当前线段是否选,直接做就可以,复杂度\(O(n^3)\)。

\(100pts:\)

可以通过离散化,把端点改成两两不同的。

对每条线段求出\(l_i,r_i\),分别表示它左右两边第一条不能覆盖的线段。

可能会有右端点\(>r_i\),但是左端点较远所以被\(i\)覆盖的线段。发现它并不会影响答案,因为\(r_i\)完全被这条线段包含,因此任何覆盖\(r_i\)的线段都会覆盖它。

此时我们把每条线段转化成了一个区间,要求选出若干区间,使他们的并为\([1,n]\)。

然后dls翻车了两次233333

显然区间右端点单调不降。设\(f_{i,j}\)为考虑了前\(i\)个区间,最左的未被覆盖的点为\(j\)的方案数。

转移时,发现\(f_{i,[1,l_i)}\)无论选与不选都不会受到影响,\(f_{i,[l_i,r_i]}\)只有不选才会保留,\(f_{i,r_i+1}\)若选,则会从\(f_{i,[l_i,r_i]}\)处转移来。

因此需要维护一个数据结构,支持区间乘法,区间和,线段树即可。复杂度\(O(m\log n)\),虽然\(n\)很大,但是在\(\log\)上,所以可以通过。

原文地址:https://www.cnblogs.com/suwakow/p/11375092.html

时间: 2024-11-01 18:23:03

ZROI 19.08.11模拟赛的相关文章

ZROI 19.08.07模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "正睿从来没有保证,模拟赛的题目必须原创." "文案不是我写的,有问题找喵老师去."--蔡老师 A R爷再次翻车,搞出来了一道六年前的CF题. \(100pts:\) 然而不是原题也很简单,斜率优化板子,单调队列搞一下就完事了. 也可以wqs二分,复杂度可以做到\(O(m\log m)\),\(与\)p\(无关.所以R爷差点把\)p$出到\(10^5\). B 本题乱搞做法非常多,所以R爷动用了权限来

ZROI 19.08.09模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(70pts:\) 维护一个栈,从一侧向另一侧扫描,如果新加入的元素与当前栈顶相同,则出栈,否则进栈.显然一个子串是括号序列,当且仅当栈为空. 枚举起点,暴力模拟即可.复杂度\(O(n^2)\). \(100pts:\) 对于一个右端点,考虑哪些左端点可以和它匹配. 发现所有合法的左端点,两者栈的内容都是相等的,可以Hash判断. 实际上考虑每次加入字符时,只会在末尾变动一次,可以用trie树维护.复杂度\(O(\sigma

ZROI 19.08.04模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "这应该是正睿OI历史上第一次差评破百的比赛." "这说明来正睿集训的人越来越多了." "我很不能理解差评,因为在比赛开始前就有超过\(40\)个差评了." 天祺鸽鸽nb! A "这题标程是线性的,可是为什么没有出\(5\times 10^6\)呢?因为spj要带个\(\log\),这样就T了." \(100pts:\) 打表观察发现有解当且仅当\(\sum k

ZROI 19.08.12模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "我发现问题的根源是大家都不会前缀和."--敦爷 A 敦爷spj写错了,差点把蒟蒻swk送走 \(50pts:\) 考虑不输出方案怎么做.显然是树形dp. 设\(f_{i,j,\{0/1/2\}}\)表示\(i\)的子树中,有\(j\)条链,根节点状态为:\(\{\)没选\(/\)选了向下的一条链\(/\)选了向下的两条链\(\}\)的最优解. 对于一棵子树,开始时只考虑根节点,依次合并每个儿子.合并时需要枚举父亲和儿子

ZROI 19.08.10模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(20pts:\) 枚举操作序列然后暴力跑,复杂度\(O(6^n)\). \([50,80]pts:\) 枚举改成dfs,每层操作后还原.复杂度\(O(3^n)\). 全0或全1可以直接返回. 写法优秀可以过\(80pts\). \(100pts:\) 类似非递归fft的写法,bitrev后可以位运算优化. 最下面四层可以预处理,复杂度\(O(3^{n-4})\). 然后疯狂卡常就完事了( 然而由于swk人菜常数大,明明所有

ZROI 19.08.05模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(21pts:\) 随便枚举,随便爆搜就好了. \(65pts:\) 比较显然的dp,设\(f_{i,j,k}\)表示在子树\(i\)中,两个赞助商分别选了\(j,k\)个的最优解. 对枚举的上下界卡的紧一点,按照树上背包的聚合分析,复杂度是\(O(n^3)\)的,可以通过. \(100pts:\) 观察数据范围可以发现,这题的子树大小限制可以抽象成一个经典的网络流模型. 跑一个最大费用流就好了. 我写丑了,每个点拆了\(5

ZROI 19.08.08模拟赛

传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. 首先恭喜swk今天翻车! "小心大样例演你."--天祺鸽鸽 果然swk今天被大样例演死了,天祺鸽鸽诚不欺我! A 这题标程是前几天ACM赛的双栈背包-- 然而可以排序之后直接背包,\(O(nm)\)随便过( B 菜 swk 菜 发现答案就是子串中最长border,即串长减去最短循环节. 每个字母是独立的,可以分开计算答案. 对第\(i\)个字母,设循环节循环次数为\(k\),在循环节内的长度为\(f_i\),剩余的长度为

2015.9.11模拟赛 codevs 4159【hzwer的迷の数列】

题目描述 Description hzwer找了一个人畜无害的迷の数列…… 现在hzwer希望对这个数列进行一些操作,请你来回答hzwer的问题. 操作一:查询第i个数的大小 操作二:把第i个数的大小改成x 操作三:将整个序列反转.即把第i个数放到第n-i+1个. 输入描述 Input Description 输入数据第一行两个数n,m,表示数列长度和操作数. 第二行n个数,表示n个元素初始值. 以下m行,每行开头一个数opr,表示操作种类. opr=1,则后面接一个数i,表示查询第i个数大小.

2015.9.11模拟赛 codevs4162 bzoj1774【无双大王】

题目描述 Description 无双大王hzwer扫清六合,席卷八荒,万姓倾心,四方仰德. hzwer拥有一片领土,其中有n个城市和m条双向道路.他规定每个人在领土上行走都要交过路费,同时进城也要交进城费.不同道路的过路费可能不同,不同城市的进城费可能不同.但是hzwer规定,如果缴纳x的进城费,那么所有小于x的进城费就不用缴纳了.(即只缴纳一条路径上的所有过路费和最大的进城费)那么从s城市出发到t城市,要缴纳多少费用?(s城市和t城市进城费也要算) 输入描述 Input Descriptio