首页 > 技术文章 > BJOI 2021 游记

dmoransky 2021-03-20 21:52 原文

我的第一次省选!

也许也是最后一次了。

毕竟学的晚,最多也只能参加两年省选。

3.20

第一次集训,早上考三个小时,一开题就发现 B 之前见过原题,但是并不会解法。。40 min 整完 A 和对拍就去冲 C 的正解,在我印象中 B 那 20 分思维难度不太与我匹配,因此写无脑的 C,写了 1h,然后对拍老不对,调试了好久,后来发现貌似是暴力写挂了,测极限数据却被卡常了,1.4s,那确实不太行,xtq 说不开 \(O_2\),那我岂不是不太行。

最后出考场很自闭,跟暴力分一样。

初发分居然 rk 1,\(100 + 80 + 100\),就好像梦一场,T3 爬过了,震撼。一堆人写挂了,测的也有问题,更新榜是 rk 2,可能是我现场打的 oi 比赛最好的一次了,个人的优势也许是代码水平还算凑合?毕竟思维太弱了。

T2

讲题人精髓完全跳过了,让人怀疑是临场强行让上去糊弄人的(

这里读完 std + 自己的一点优化写一下题解:

首先考虑插入 \(1, 2\),注意到为了最后合法我们仅需要让当前序列中空隙必须插入用 \(3, 4\) 隔开即可,因此只需知道当前序列有多少个相邻相同对,这步可以 \(O(n_1^3)\) DP。

然后考虑忘空隙中插入 \(3, 4\),利用刚才的数组可以预处理出一个 \(g_i\) 数组流出恰好给 \(3, 4\)\(i\) 个空(定义这个空为段)的 \(1, 2\) 分配方案。

接着考虑把这个空分成三组,注意到 \(3, 4\) 在一个空里插的必须交替,因此 \(3, 4\) 在一个连续段中数量差不超过 \(1\)。如果枚举了 \(3\) 数量 \(>\) \(4\) 数量的段数,那么可以推出 \(<\) 的段数。

我们可以用 \(O(n_1^2)\) 枚举这样的 \(3>4, 3=4, 3<4\) 的段数 \(a, b, c, a + b + c + s\),我们先把这些段分成这三组即一个多重集组合数:\(\frac{s!}{a!b!c!}\)

紧接着就是本题精髓,我们目前要解决的是把固定数量,这样分配进去,让他们和恰好等于题目要求并且满足刚才的限制,看起来不太能做。但是考虑构造一个映射,如果我们确定每个段里 \(B\) 的个数,还有刚才的分组信息,是否就可以不重不漏映射出一组方案呢?确实是可以,但是要注意 \(3=4\) 的情况有两种形式,所以外面 \(\times 2^{b}\) 就可以。

问题变成了求一个长度为 \(s\)\(x_i\) 数组满足有 \(b\) 个位置 \(x_i \ge 0\),剩下位置是正整数的方案数。考虑建立一个映射,将 \(b\) 个位置 \(+1\) 就变成了经典问题。

这个局部 \(+1\) 还是蛮神奇的。

到这里就做完了。

3.21

今天蛮自闭的,早上想着换一个机房坐,结果开题发现一道自己见过但不会。

之后一直爆肝这道也就是 C,最后忘记 100pts 咋写了,写了个 70 pts,但最后跑太慢无奈打了个表,剩下就没时间了,打了 AB 的暴力。后来发现 A 很简单,只是一个猜结论。。自闭了。

最后全场就我 A 低于 \(80\) 分。。耻辱。

不过好在 C 的 70 分还很有用,稳在 10 名。感觉这个排名已经非常满意了,希望能稳在这里(flag

A:结论连通图可以最后变成完全图,考虑每次缩一个长度为 3 的链变成一个环缩成一个点。我这都不会,就这, 就这。

B:考虑大力容斥,枚举强制选的禁点,强制选的行列,要统计剩下可选的点,斜着会不好弄,考虑三个共点只会出现在 \(i, n - i\) 这种形式,所以每次把这些行列放在一起暴力枚举情况做背包。

C:考虑最后对调值域

3.27

今天完全做了暴力老哥,非常的逊。

最后还是 rk10 其实能保持在吊车尾挺好的蛤。

学到的东西:

  • 考虑联通块建图不行的时候考虑能不能把点拆开这样更加形式化。

  • 神奇的黄金分割比

  • 通讯题也有平衡思想

  • T2 分治!!所有选段问题其实都可以考虑就是链上分治。、

  • T3 考虑函数性质可以考虑迭代、找规律等等。还有就是一个货仓寻址问题的扩展版本,通过平移变换来转化成原问题。

今天的 T1 jkp 讲了还不会是真的逊。

3.28

越来越逊。

学到的东西:

  • 有时候要猜结论不能硬刚。
  • 考场也想到了当成多项式可时间不够。
  • 一堆多项式的东西。

4.9 Day 0

摸了一天鱼,回家很快便进入梦乡。

4.10 Day 1

早上起来有点困困的,可能是睡的太多了吧。

进场,看了一会 T1 发现自己好像会把一副牌拆开,双指针,一个值域区间合理等价于 \(n\) 个都有一个在,并且只有下面在的不超过 \(\le m\) 个,瓶颈在排序 \(O(n \log n)\)

然后写了,过了大样例,拍到结束,大概有一百万组(?

然后就是自闭 5h,BC一个不会,B 这种构造我做过一个类似的 APIO 题,所以就一直想用 \((1, 1), (i, 1), (1, j)\) 这样状物的去表示 \((i, j)\),构成一个差分约束啥的,但是写到一半发现还有和的限制,自闭了。。C 这个东西我先写了个按照题意模拟,然后改成 \(O(mn^3)\) 这样的,因为动态加边维护强连通分量这个东西我一点不会。。后来发现只用写很短,枚举一对点对的贡献二分就可以 \(O(n^2m\log m)\)。。感觉 \(44\) 很悬,但是大样例跑的还行。

最后一会还是不会 B,连 \(m = 2\) 都不会也是没谁了,一直陷入自己的怪圈里。

然后最后 B 整了个随机生成,那必然是爆零了。

预计得分大概是 \(100 + [0, 35] + [16, 44]\) 这样的,这破东西估计最少也都三四十名了吧。。

回家自闭睡了会,晚上很晚也没有睡着很自闭。

4.11 Day 2

第二天到了考场,结果回收系统上不去睡了半个小时。

后来起来,看了三个题,好家伙,一个不会。又想了半天,总算会了 T1 的两只 \(\log\) 做法,那就写呗,写了一个小时过了大样例,貌似是 \(0.8s\) 不开 \(O_2\),感觉还是不错的。又搞了半个小时整对拍,又双叒叕拍到结束。

BC 又不会那真的是经典回放了,一开始 B 还看错题了,暴力写挂,然后发现居然可以 \(O(n!n)\) 算贡献啥的,那我写暴力干啥呢?

C ,我实在是太愚蠢了,连多项式做法都不会,咍咍,连断掉 \(u\) ,DFS 都不会,我还有救吗?最后整了个树的部分分,自闭了半小时,就结束了。

大概得分是 \(100 + 60 + [10, 25]\)

感想

可能一直以来都是一个人在自己乱整 OI 吧,可能方向走的挺偏的。

对于若干简单算法的应用,需要灵活转化的题始终学不来。这段时间反而学了很多没有用到的科技,最终考试用到最难的算法也只有线段树。

如果还有机会,会着重放在 CF、AtCoder 这上面吧。不要再做板子了。

Update:回顾这次比赛,感觉没有挂分是最大的特点,但是 matrix 的几乎爆零和 d2t3 的不会 dfs 真的太屑了。要多练练打暴力能力(

摸鱼就摸鱼,训练就训练,要有详细的计划,不能整天随便乱看,一点作用没有。

4.15

yls 说貌似进队了,rk 7 左右,还蛮震撼的。感觉学校还蛮好的,居然有这么多优惠政策,可以天天旷课肄业了

今后的计划:

  1. 每天一套 CF div1
  2. NOI 往年题做
  3. 一定要补题!
  4. CF、AtCoder 比赛尽量参加练手感。

有意思的题写题解记录下来。

推荐阅读