PKUWC2020? 退役记

PKUWC2020? 退役记

RT,暂时退役搞期末考了。

Day -inf

woc,发现自己能去 PKUWC,rp 好爆了。

woc,发现自己压线能去 WC,rp 好爆了。

woc,发现自己 div2 的题都不会,而且一次不会就不会两道,实力弱爆了。

然后就是颓废颓废颓废。。。

Day 0

忘了学校盖章。。。

住宿被搞了两次。。。

rp 差爆了。。。

途中听说 PKUWC 改 OI 赛制了,爆零预定

Day 1

早上两个小时讲课变成 40 分钟了

去未名湖和博雅塔(一塌糊涂)玩了一下,再去西门拍了照。

真是颓废

中午去睡了一觉,去考场一看

不愧是听说,赛制是 IOI 赛制

没有主地斗,可能有学上了

我在想桃子

t1 先想了一个矩乘,然后萎了

t2 暴力不会

t3 数论结构

暴力有 50 左右,不愧是我

然后发现 memset0 和 zoxx 在我旁边

他们好厉害啊,我自闭了

码码码,大概三点半成功 get 58

我是 sb,然后上了个厕所冷静了一下

算了,心态崩了,打四方暴力吧

艹,居然打出来了,四点半了。

好像可以二方?

打完五点十几,脑子一抽,会一个 log 了。

码一码,五点半了。

md,没调出来我退役好了

终于,五点四十八调出来了,1A 了。

然后 t3 m=1 的包没时间写了

不过 a 了一题,很开心。

\(21+100+19=140\)

题目:

t1:

给定一个排列 P,将字典序 <=P 的排列按顺序接在一起,求本质不同的子序列(可以为空)的个数。

\(n\le 50\)

t2:

有 n 个集合,每次等概率选择两个不一样的集合合并起来

定义一个集合的价值为 (max(S)-min(S))^2。若有 k 个集合,价值为 k 个集合价值之和。

f(i) 为有 i 个集合的期望价值,求 f(l)97673+...+f(r)97673

\(n\le 2\times 10^5\)

t3:

有一个 n*m 的矩阵,初始为空。有 q1 次操作 1,有 q2 次操作 2,操作 1 后操作 2

操作 1:s,l,r,x,将 gcd(a,s)==1,l<=b<=r 的格子 (a,b) 加 x

操作 2:s,l,r,询问 gcd(a,s)==1,l<=b<=r 的格子之和

数据保证 s 随机。

\(n,m\le 5\times 10^4,q_1,q_2\le 10^5\)

t1,t2 mod = 998244353

t3 mod = 2^32

题解:

t1: 找规律,然后类似数位 dp 的方式矩乘算一算方案数。

t2: 三次 NTT,过程挺复杂的,期末考后再补。

t3: 你觉得我会?听 jls 说复杂度要求导证明,\(O(n\log^3n+n\sqrt{n})\),神仙莫比乌斯反演。

Day 2

我是 sb。。。

花了两个小时大众分拿到后先开 t2 没开 t3

t2 没调出来,t3 没写

艹,我 tm 如果三个小时写 t3 我还写不出来???

最后三小时就没拿分。。。

\(100+65+42=207\) 滚粗了。。。

有一种深深的无力感。。。

Day 3

拿了个奖,海星。

一道数学题让我拿了个奖,海星。

不过让我知道了我的实力不行。。。d2 难度严格小于 d1 难度时我 d2 考成 sb。。。开题策略失误,先开 t2 再开 t3,导致 t2 没调出来 t3 没时间写。。。

然后 t3 想了半个小时会了。。。我考场上如果最后 3h 全放 t3 上我还写不出 t3???

这让我想起了别人打 cf div1 随便 A 题,我打 div2 都有些吃力。

基础不行啊。。。要好好补一补了。。。(还有 ubuntu)

算了,结果是好的,我无所谓了。运气好爆了。

题目:

t1: sbt

t2:

有一个分式序列,给定每个位置的值和长度的排列,分式长度小的先计算,每次询问一个区间经计算后的值。

\(n,m\le 5\times 10^5\)

t3:

有一个无向图,无向图上再连一个环(i->i%n+1)的边,权值为 10^9,问这张图两两之间的最小割之和。

\(n\le 7000,m\le 10^5,w\le10^4\)

t2,t3 mod = 998244353

题解:

t1: sbt

t2: 好像有 O(n) 的做法,考虑每个数单调栈上的奇偶性。不过出题人的做法是线段树合并,暴力又好懂,不过问了一下 srz,这个可以不用合并,记一记前缀后缀用最大子段和的方式算一算。

t3: 环上断两条边后把问题转化成一段区间内 l<=(i or j)<=r 相连和其他点之间相连的 max,这个东西可以用最小割树的方法,也可以预处理出矩阵的前缀 max 和后缀 max,O(1) 出答案。

附:

晚上睡觉的时候想了一想,发现我考场上 t2 的思路是对的,只不过细节有些多,我 naive 的以为左右边应该有对称美(调不出来 flag*1),然后就爆炸了。

我们将这个序列用广义线段树的方法建出来,发现一个区间对应了一段右儿子和左儿子拼起来。那么我们可以用 zkw 线段树的方法,从叶子结点向上跳,l-1 的叶子碰到左儿子把右儿子合并一下,r+1 的叶子碰到右儿子把左儿子合并一下,这样就能算出答案了。

我们再考虑合并时一个值会变成它的逆元(下面记为翻转)几次。对于左边,因为每一个子区间都是右儿子,所以除了第一个从叶子开始的右儿子结点,其他右儿子会被翻转一次。那么我们预处理从根开始向下的逆元之积,再处理出一个节点向上最近的右儿子,跳到 lca 处就可以出答案了。

对于右边,因为每一个子区间都是左儿子,所以每一个节点都会被翻转到 lca 路径上左儿子个数次。那么一段左儿子相邻一定是奇数不翻转偶数翻转,所以我们可以类似左边的方法预处理出从根开始向下的答案,不过不用处理向上最近的左儿子。不过如果 lca 下面那个结点开始到根左儿子个数有奇数个,那么要把答案翻转。这样就能出答案了。

不过有很多细节,比如 lca 下面那个结点是不算的,如果左边没有右边不用翻转等等。。。我考场上就被各种细节弄自闭了。。。

唉,day2 应该是可以 ak 的啊。

再说一下 d1t2 我考场的做法吧。

首先考虑排序后一对 \((i,j)\) 构成的集合对答案的贡献。我们只用考虑这个集合在 \((i,j)\) 中间选了几个,剩下的数合并了多少次。

\(n\) 个集合,每次有 \(n\choose 2\) 种选法,一共有 \(f_n=\prod_{i=2}^n{i\choose 2}\) 种选法。因为集合个数为 \(0/1\) 时可以不合并,所以 \(f_0=f_1=1\)

我们设在 \((i,j)\) 中间选了 \(k\) 个,一共合并了 \(t\) 次。

\[ans_t=\sum_{i=1}^n\sum_{j=i+1}^n\sum_{k=0}^{j-i-1}(a_j-a_i)^2{j-i-1\choose k}{t\choose k+1}f_{k+2}\frac {f_{n-k-2}}{f_{n-t-1}} \]

这样就 \(O(n^4)\) 了。

接着,我们发现只有两项与 \(i,j\) 有关。预处理出这些项,就可以优化了。

\[len_{j-i}=\sum_{i=1}^n\sum_{j=i+1}^n(a_j-a_i)^2 \]

\[val_k=\sum_{i=k}^{n-2}len_{i+1}{i\choose k} \]

那么式子就变成了

\[ans_t=\sum_{k=0}^{n-2}val_k{t\choose k+1}f_{k+2}\frac {f_{n-k-2}}{f_{n-t-1}} \]

这样就可以 \(O(n^2)\) 了。容易发现这三个式子都可以 \(\text{NTT}\),所以就 \(O(n\log n)\) 了。

不过我 \(ans_1\) 有锅,要特判一下,我也不知道为什么。。。如果你知道的话可以私信我。。。

以前以为自己数据结构还可以,结果反倒在大型考试做出来的第一道题居然是一道不错的数学题。。。看来可能还是数学题比较适合我吧。。。

posted @ 2019-12-23 22:40  Owen_codeisking  阅读(785)  评论(2编辑  收藏  举报