Atcoder Regular Contest 124 (vp)比赛记录

 


Atcoder Regular Contest 124 (vp)比赛记录

通过情况

赛时:A

赛后:BCD

(好菜啊,赛时只会做一个题,咋回事啊)

题解

A

傻逼题,略

B

我们显然可以 O(nlogn) 的 check 一个数

然后就 O(n2) 枚举一对 ai,bj,check一下 aibj 行不行,得到 O(n3logn) 做法

与NOI不同的是,这玩意没部分分,必须更快

一个事实是,对于一组满的匹配,a1 肯定有一个匹配(废话)

然后我们枚举 a1 匹配了哪个,check一下,变成 O(n2logn) 就行了

C

注意到,最后剩下来的两个 gcd 情况数不会很多。我们可以从直觉上感觉到这个 gcd 非常的少。

注意到红色和蓝色并没有区别。考虑这样转换,我们就随便分两堆,最后 a1b1 肯定不在一个堆,令 a1 那个堆是“红”,b1 那个堆是“蓝”,就行了。容易发现这样肯定不重不漏,确实是等价的。

然后红色堆的 gcd 一定是 a1 的因数,蓝色堆的 gcd 一定是 b 的因数。打开 factors.jpg,发现这两个东西都 1344,暴力枚举

又注意到 n50,容易想到,这样枚举一波之后,O(n) 的 check 一遍,看看行不行

复杂度 O(σ0(a1)σ0(b1)n)

D

套路的,把置换分解成环

设序列的前 n 个为 A 部分,后 m 个为 B 部分。

一条环上,会有若干条边。如果一条边连接的两个点在一个部分,那这个边上的点就不能交换,这边就无效了。给它打一个叉叉,记作 X 边(形 象 生 动)。如果两个点同属 A 部分,记作 XA 边;同理有 XB

对于一条跨过 A,B 两部分的边,给它打一个√,记作 V 边 (形 象 生 动)

如果一个环全是 V 边,显然它就是一个随便换的环,有一个经典结论,可以 V1 步把它交换到位 (到位:即 i 位置上的值是 i ,也就是目标状态)

如果一个环里有 s 个点,并包含至少一个 V 边(那就一定会有两个),容易手玩出,也容易证明出,这个环也可以 V1 步到位。

反过来,如果一个环里都是 X 边,似乎不太好做。假设这个环里有 s 个点。

我们肯定不能考虑在环内动手脚了,毕竟一条边都不能动。容易想到,从另一个部分里面“借”一个东西来,交换一圈,再“还”回去。容易手玩出,这样最少 s+1 步,就可以让这个环里都归位,且这个“借”来的东西还在原位不变。

一个例子:

n=3,m=1p={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 环。

那我们的一种方案就是,cV(|c|1)+cX(|c|+1)

这里的 V,X 表示 V 环集合,X 环集合,c 是一个环,|c| 表示这个环里有多少个点

这个式子可以化一下,把所有的 |c|1 分开。所有的 |c| 加一块就是 n+m,这些 1,1 加起来就是数量。所以这个式子就是 n+m+|X||V|

这样一定优吗?

注意到,对于一个 XA 环和一个 XB 环,我们可以交换它俩的一个元素,使它俩合并为一个 V 环。合并成 V 环之后,似乎能快两步,抵消了合并这一步,并且更优

现在设 A 表示 XA 环的数量,B 表示 XB 环的数量,C 表示 V 环的数量。我们的策略是:

  1. 花费 min(A,B) 步,合并。合并时,两个 X 环变成了一个 V

    于是剩下 max(A,B)min(A,B)X 环,以及 min(A,B)+CV

  2. 接下来就是,X 环花费环长+1步,V 环花费环长-1步。

考虑这样的总代价:

min(A,B)+n+m+(max(A,B)min(A,B))(min(A,B)+C)=n+m+max(A,B)min(A,B)C

S 表示环的总数 =A+B+C。式子又可以化成,n+mS+2max(A,B)。这就是题解里的式子了。

然后就算一波就行了

耗耗反思

这次比赛,不讲武德,来,骗,来偷袭,我这个小垃圾

我劝,这个垃圾zps,耗子尾汁,耗耗反思

赛场实况

赛场上我很快就秒了 A 题,但是 B 题卡了快 2h。完全没有看到 C,D 两题的题面

而我做 B 题时,草稿纸上已经写下了 “枚 i,枚 jn3” 的字样,却没想到这 i,j 不用枚那么多,转而去想:是不是值不太多?一打表发现随机数据都有 1e5 级别,这个思路就直接废了

废你妈啊废再去想一会啊草

然后我就去想神秘分治,甚至是trie树上搞一些神秘操作,一个都没成型

傻逼吧,这一看就不是B题的难度啊

然后我就一直在trie树trie树,trie了俩小时,啪的一下比赛结束,时间就像被吸走了一样

我还没反应过来,比赛结束了,此时我只交了 A 题,看了 A,B 两题。C,D 两题的题面甚至是赛后看的

问题/sol

  • 时间分配不当
  • 思维不够灵活
  • 赛制不够熟悉

sol:目测多打几场,多做点题,就行了

posted @   Flandre-Zhu  阅读(67)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示