XDU22年新生赛现场赛


一大早醒来一看九点半。

突然想起来有热身赛,急急忙忙起来洗漱。

G 楼好远,到了 G 楼已经十点半了。

打开电脑开始试机。

椅子很舒服。

登上网站开始热身赛。

第一题是输出冯佬朋友的缩写?

看到网站是 orz.grey.top ,那应该就是 grey 四个字母中的一个吧。

答案是 r ,试的第二遍对了。

第二题是将奇数偶数分别排序再输出。

第三题是网络赛最后一题的青春版,看到这题我就直接润了,将电脑锁屏后去帮老乔试机。

老乔电脑没啥问题后我就回宿舍了,路上去 1931 买了 40 块的补给来应对下午正式赛的 5 小时。

本想睡一觉,外卖到时已经十二点多了,吃完已经十二点半了,没办法吃完就往 G 楼赶。

匆匆忙忙赶到已经 12 点 50 ,敲了点模板,然后闭目养了会神。

比赛开始了。


A 位运算(2022版)

好像某年的新生赛也有一题叫位运算。

一看,这不就是 lowbit 吗。

诶, lowbit 是啥来着。

忘掉了,于是只能写一个模拟,通过了这题。


此时看榜,已经有不少人过了。

发现 C 题有人过了,去看 C 题。


C 除数强迫症

一个数学题。

拿笔算了算,得到了一个略微有点繁琐的做法。

统计 $1\sim n$ 中 $m^i$ 的倍数的个数 $cnt_i$ ,那么答案就是

这个 $cnt$ 直接用 $n$ 一直除以 $m$ 就能得到了。

时间复杂度不太会算,最坏应该是 $(T\log^2 n)$ 吧。

————————————

UPD ON 12.7,傻逼做法。

直接就逝 $\sum cnt_i$ 。


过了后看榜,发现 B 有人过了,又去看 B 。


B 接龙数列

第一次看时还以为是啥构造难题。

这次再看才发现也是一道送温暖的签到题。

直接扫一遍,发现不满足前尾后首相等的条件后加一个数就行。

时间复杂度 $O(Tn)$.


这题过了后发现没啥新题有人做了,于是自己看了看后面的题。

呜啊,D 的样例看起来好可怕,pass 。

呜啊,E 是一道以前见过的贪心,以前就没有做出来, pass 。

呜啊,F 是一道构造题,我没有脑子, pass 。

呜啊,G ,字符串, pass 。

诶,H 看上去好像是一个裸的线段树,于是开始写 H 。

H 洗把脸我安心

两个操作,一个单点修改,一个查询区间内第一个小于某个数的数的位置。

考虑用线段树维护区间最小值。

第一个操作很好搞。

第二个操作只需在 ask 函数中优先进入左子节点,超出询问区间的就直接 return INF ,最后取 min 就行。


测样例,过了。

交上去, TLE ?

很是疑惑。

此时只有我一个人交了这题。

一看时限, 0.3s 。

难不成 $O(n\log n)$ 的算法过不了,是 $O(n)$ 的算法?

想了一会儿,没啥思路。

此时看榜,树剖神已经 A 掉了这题。

继续看代码,终于查到了一个傻逼错误。

ask 函数中如果左子节点已经查到了一个位置,那么就没有必要去查右子节点了。

这个加上去提交后, A 掉了这题。

痛失一血

接着去看了 D 题。


D 楼层编号

读懂了题目后发现好像挺简单的?

把数字中的 $3$ 与 $4$ 提取在一起,把 $4$ 看成 $1$ ,把 $3$ 看成 $0$ ,将其看成二进制数,求出对应的十进制,然后对十进制进行如下的转化。

1-->A
2-->B
3-->C
....
26-->Z
27-->AA
28-->AB
....

这有点儿像满 27 进 1 的 26 进制数。

写锅了好几次,发现如果是 26 的倍数需要特殊处理。

比如 52 ,应该是 AZ 。

52%26=0 ,因此需要特判,直接在当前位置加一个 Z ,然后将 52 减 1 后再除以 26.

这样处理 26 的倍数就过了。

此时看榜,发现很多人做出了 F 题。

于是去看 F 。


F 排排列列

感觉有点难搞。

但一想到这么多人都做出来了,那应该不会太难罢。

一开始写了个傻逼的模拟,样例过了,交上去,不出意料的 WA 了。

一直在想,如果用这三个操作能够实现交换这个操作的话,就那么这题就变得很简单了。

然后注意到操作次数限制不能超过 $3\times n$ ,想到这或许是个提示。

是不是能用 $3$ 次操作来实现交换操作呢?

动手模拟模拟,发现居然可行!!!

例如

两个数 a b
对其应用操作 2
变成了 a-b b
再用操作1 
变成了 a-b a
再用操作3 
变成了 b a

如此就完成了交换操作。

那么扫一遍,遇到了不属于该位置的数,直接交换即可。

这样即使每个数都要交换,那么次数也不会超过 $3\times n$ 。

很是高兴,提交,傻了, WA 。

很是疑惑,感觉没啥问题。

再一看,哦,没输出操作的个数。

修改后提交,哈哈,还是 WA 。

写了个数据生成的代码,按照我的输出来复原一遍,还是没啥问题。

索性直接生成了一个 $n=10000$ 的数据,然后输入,发现居然不出解。

哦,操作有 $3\times n$ 个,我数组开的是 $n$ 。

哈哈。

喜提几发罚时。

数组开大后过了。


此时距离比赛结束还有一个半小时左右。

树剖神好像只剩最后一题了 orz 。

看到 E 有不少人去做,再加上其他的题一看也不是我这种蒟蒻能做出来的,果断去思考 E 题。

封榜前我是 rk3 。

试了好几种贪心,全都 WA 了。

距离比赛结束还有半小时,此时我的 1 点钟方向突然有拍手声。

一看,是树剖神!他 AK 了。

太强辣。

贪不出来辣,果断开摆。

在椅子上瘫了半个小时。

结束了,剩下的人拍了张合影

坐在树剖佬旁边 orz 。

剩下题就等题解罢。猪脑过载。


UPD ON 12.5

凌晨两点睡不着。

干脆把题拿出来看看。

J 题。

在板子上推了一会儿,发现好像可以化,最后化出来一个看起来可做的式子,矩阵快速幂加速递推。

感觉自己半夜脑子有点迷糊,推完后就放下板子闭眼了。

不知过了多久才睡着。

早上醒来,疯狂补工图。

间隙问了问出题人是不是矩阵加速递推。

确实是。

下午上完工图课,开始写 J 题。

发现自己之前的矩阵快速幂模板现在看不懂了。

从网上蒯了一个下来,然后开始写。

第一次忘了开 long long ,开了后过了。

恨,赛时应该把这题看看的。


J Artist

假设下标小于 $0$ 的 $f$ 值为 $0$

则为

故即为

则有

相减,得

所以根据

矩阵快速幂加速递推 $F_n$ 和 $f_n$ 即可。

时间复杂度 $O(\log n)$ 。


UPD ON 12.7

晚上七点讲题+滚榜。

吃完饭直接回了宿舍,翘掉了选修课。

坐在电脑前,开始等待讲题。

C 题听了后才发现我做法有多 sb , 哈哈哈。

直接就是 $\sum cnt_i$

我这个做法属实有点 sb 。

开讲 E 题了。

发现是从位置的角度来考虑的。


E 经典问题

考虑从左到右决定每个位置填入哪一个数。

对于位置 $i$ ,可以填入其中的数为所有满足 $l_j\le i,r_j\ge i$ 的 $j$ 。

贪心:应该填这些数中 $r_j$ 最小的那个。

证明,直接贴 ppt 吧(

所以可以从 $1$ 到 $n$ 每个位置扫一遍,每个位置找 $r_j$ 最小的 $j$ ,这样直接写的话是 $O(n^2)$ 的,肯定 TLE。

考虑用优先队列优化,先把限制按 $l$ 从小到大的顺序排序,然后在扫位置的过程中,把 $l$ 小于等于当前位置 $i$ 的 $r_j$ 全都 push 进优先队列,然后直接取出队头放到当前位置即可。

若过程中队列为空或者队头的 $r$ 小于当前位置,那么说明无解,输出 -1 。


G 最大分割

要求最大子串长度与最小子串长度之差最小,那么意味着子串长度要么是 $\lfloor n/k\rfloor$ ,要么是 $\lceil n/k \rceil$ ( $n\bmod k$ 个 $\lceil n/k \rceil$ ,$k-\lceil n/k \rceil$ 个 $\lfloor n/k\rfloor$

设 $dp[i][j]$ 表示将字符串 $s[\dots j]$ 分为 $i$ 个子串能得到的最大价值和,则

那么问题就是如何求出 $val$ 了。

对于一个串,从前往后扫,设当前字符为 $c$ ,那么 $c$ 增加的贡献即为当前位置到上一个 $c$ 出现的位置的距离,所以维护每个字符出现的上一个位置,那么即可 $O(n^2)$ 求出所有子串的 $val$ 。

求出了 $val$ 后直接 $O(nk)$ 进行 DP 即可。

时间复杂度 $O(n^2)$ 。


I 正因子乘积

求所有的正因子乘积,考虑质数 $p_i$ 在答案中的幂次。

那么答案便是

代入

故取模后为

$N$ 不是完全平方数,所以必然存在一个 $m_j$ 为奇数,所以 $2 \mid \prod_\limits{j=1}^k(m_j+1)$ 。

所以做 $k$ 次快速幂即可。

或者还可以用欧拉定理,这样只用做一次快速幂。


K Hope

感觉不是现在的我能解决的问题。

贴个题解吧。


总结

发现封榜后的策略有些问题。

不应该去死扣 E 题。

感觉当时如果去做 J 题的话应该是能做出来的。

I 题当时其实看了看,计算方法其实也得出来了,但是当时就在考虑这个 $N$ 是不是要构造出来结果这个 N 事实上是唯一的 ,所以就放弃了。往下推推说不定能发现其实与 $N$ 是无关的。

总之就是菜。


讲完题就是激动人心的滚榜环节了。

rk4 ,挺好,一等奖第一

然后学长推荐我去找 rk3 和 rk10 组队,发现都是浪潮 ACM 组的。(事实上 rk2 也是

主动加了好友,成功组了队。

社恐的巨大突破!

抱紧 rk3 的佬的大腿(

rk10 的这位是零基础的 Orz,天赋真好。

希望能一起努力,在 acm 这条路上走下去吧!


文章作者: HoshiuZ
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 HoshiuZ !
  目录