Atcoder Regular Contest 124 (vp)比赛记录
Atcoder Regular Contest 124 (vp)比赛记录
通过情况
赛时:A
赛后:BCD
(好菜啊,赛时只会做一个题,咋回事啊)
题解
A
傻逼题,略
B
我们显然可以 \(O(n\log n)\) 的 check 一个数
然后就 \(O(n^2)\) 枚举一对 \(a_i,b_j\),check一下 \(a_i\oplus b_j\) 行不行,得到 \(O(n^3\log n)\) 做法
与NOI不同的是,这玩意没部分分,必须更快
一个事实是,对于一组满的匹配,\(a_1\) 肯定有一个匹配(废话)
然后我们枚举 \(a_1\) 匹配了哪个,check一下,变成 \(O(n^2\log n)\) 就行了
C
注意到,最后剩下来的两个 \(\gcd\) 情况数不会很多。我们可以从直觉上感觉到这个 \(\gcd\) 非常的少。
注意到红色和蓝色并没有区别。考虑这样转换,我们就随便分两堆,最后 \(a_1\) 和 \(b_1\) 肯定不在一个堆,令 \(a_1\) 那个堆是“红”,\(b_1\) 那个堆是“蓝”,就行了。容易发现这样肯定不重不漏,确实是等价的。
然后红色堆的 \(\gcd\) 一定是 \(a_1\) 的因数,蓝色堆的 \(\gcd\) 一定是 \(b\) 的因数。打开 factors.jpg,发现这两个东西都 \(\le 1344\),暴力枚举
又注意到 \(n\le 50\),容易想到,这样枚举一波之后,\(O(n)\) 的 check 一遍,看看行不行
复杂度 \(O(\sigma_0(a_1)\sigma_0(b_1)n)\)
D
套路的,把置换分解成环
设序列的前 \(n\) 个为 \(A\) 部分,后 \(m\) 个为 \(B\) 部分。
一条环上,会有若干条边。如果一条边连接的两个点在一个部分,那这个边上的点就不能交换,这边就无效了。给它打一个叉叉,记作 \(X\) 边(形 象 生 动)。如果两个点同属 \(A\) 部分,记作 \(X_A\) 边;同理有 \(X_B\) 边
对于一条跨过 \(A,B\) 两部分的边,给它打一个√,记作 \(V\) 边 (形 象 生 动)
如果一个环全是 \(V\) 边,显然它就是一个随便换的环,有一个经典结论,可以 \(V-1\) 步把它交换到位 (到位:即 \(i\) 位置上的值是 \(i\) ,也就是目标状态)
如果一个环里有 \(s\) 个点,并包含至少一个 \(V\) 边(那就一定会有两个),容易手玩出,也容易证明出,这个环也可以 \(V-1\) 步到位。
反过来,如果一个环里都是 \(X\) 边,似乎不太好做。假设这个环里有 \(s\) 个点。
我们肯定不能考虑在环内动手脚了,毕竟一条边都不能动。容易想到,从另一个部分里面“借”一个东西来,交换一圈,再“还”回去。容易手玩出,这样最少 \(s+1\) 步,就可以让这个环里都归位,且这个“借”来的东西还在原位不变。
一个例子:
\(n=3,m=1\) ,\(p=\{2,3,1,4\}\)
(符号|分割A,B两部分) (step) : (p) 0: 2 3 1 | 4 1: 2 3 4 | 1 2: 1 3 4 | 2 3: 1 2 4 | 3 4: 1 2 3 | 4
用了4步, 把序列变成了 \(\{1,2,3,4\}\),左边全部归位,借来的 “4” 位置不变
称:有至少一个 \(V\) 边的环为 \(V\) 环,全是 \(X\) 边的环为 \(X\) 环。
那我们的一种方案就是,\(\sum\limits_{c\in V} (|c|-1)+\sum\limits_{c\in X} (|c|+1)\)
这里的 \(V,X\) 表示 \(V\) 环集合,\(X\) 环集合,\(c\) 是一个环,\(|c|\) 表示这个环里有多少个点
这个式子可以化一下,把所有的 \(|c|\) 和 \(1\) 分开。所有的 \(|c|\) 加一块就是 \(n+m\),这些 \(1,-1\) 加起来就是数量。所以这个式子就是 \(n+m+|X|-|V|\)
这样一定优吗?
注意到,对于一个 \(X_A\) 环和一个 \(X_B\) 环,我们可以交换它俩的一个元素,使它俩合并为一个 \(V\) 环。合并成 \(V\) 环之后,似乎能快两步,抵消了合并这一步,并且更优
现在设 \(A\) 表示 \(X_A\) 环的数量,\(B\) 表示 \(X_B\) 环的数量,\(C\) 表示 \(V\) 环的数量。我们的策略是:
-
花费 \(min(A,B)\) 步,合并。合并时,两个 \(X\) 环变成了一个 \(V\) 环
于是剩下 \(max(A,B)-min(A,B)\) 个 \(X\) 环,以及 \(min(A,B)+C\) 个 \(V\) 环
-
接下来就是,\(X\) 环花费环长+1步,\(V\) 环花费环长-1步。
考虑这样的总代价:
令 \(S\) 表示环的总数 \(=A+B+C\)。式子又可以化成,\(n+m-S+2*max(A,B)\)。这就是题解里的式子了。
然后就算一波就行了
耗耗反思
这次比赛,不讲武德,来,骗,来偷袭,我这个小垃圾
我劝,这个垃圾zps,耗子尾汁,耗耗反思
赛场实况
赛场上我很快就秒了 A 题,但是 B 题卡了快 2h。完全没有看到 C,D 两题的题面
而我做 B 题时,草稿纸上已经写下了 “枚 \(i\),枚 \(j\),\(n^3\)” 的字样,却没想到这 \(i,j\) 不用枚那么多,转而去想:是不是值不太多?一打表发现随机数据都有 \(1e5\) 级别,这个思路就直接废了
废你妈啊废再去想一会啊草
然后我就去想神秘分治,甚至是trie树上搞一些神秘操作,一个都没成型
傻逼吧,这一看就不是B题的难度啊
然后我就一直在trie树trie树,trie了俩小时,啪的一下比赛结束,时间就像被吸走了一样
我还没反应过来,比赛结束了,此时我只交了 A 题,看了 A,B 两题。C,D 两题的题面甚至是赛后看的
问题/sol
- 时间分配不当
- 思维不够灵活
- 赛制不够熟悉
sol:目测多打几场,多做点题,就行了