UESTC 第十届 ICPC 趣味程序设计竞赛第三场(正式赛)题解

4/5 Penalty: 09:23:54 Rank 20

罚时爆炸,代码调不对,概率论不会,整段垮掉。

A. 秦皇炒饭

题目大意:将 1 ∼ n 分成最少的组,使得组内元素两两互质。求这个组数。

第一眼就和 Codeforces Round #400 B. Sherlock and his girlfiend 混了,然后 XJB 调都不对,然后自闭了。

最后打了个暴搜,找到了规律,交上去过了……

结论:当 n > 1 时,分成最小组数为 ,当 n = 1 的时候输出 1 次。

证明:因为 2k2k + 1 互质,一定能放到一组,偶数不满足两两互质不能放在一组,编号为 1 的可以放在任意组。

时间复杂度:𝒪(n),空间复杂度:𝒪(1)

代码见这里

B. 摩天乐

题目大意:一栋楼的左边和右边都有电梯,上下移动只能坐电梯,求一点到另一点的最小距离。

这题 WA 了 5 遍真是没救了……

只需要做出从左边电梯下楼和从右边电梯下楼的答案,然后输出小的即可。

注意同层情况……

时间复杂度:𝒪(T),空间复杂度:𝒪(1)

代码见这里

C. Akane

题目大意:给定长度为 n 的序列 A,重新排列 A,使有尽可能多的相邻数对,满足 (Ai+Ai + 1) mod  m ≡ 0

把式子拆开:(Ai mod  m+Ai + 1 mod  m) mod  m ≡ 0

于是,我们对于每一对 (i,j), i + j = m 进行配对即可。注意个数相等和个数等于 0 情况的判断。

时间复杂度:𝒪(n+m),空间复杂度:𝒪(m)

代码见这里

D. 强哥打电话

题目大意:两个人会在一些时间段内打电话,另一个人给这两个中的一个打电话,他从一个时刻开始打,每次打会保持一段时间,如果没打通他会在挂断之后的一段时间后再打,求什么时候能打通。

把时间转化成秒数做,然后暴力……

时间复杂度:𝒪(Tn),其中 T = 86400,空间复杂度:𝒪(T)

代码见这里

E. 永远的X日之都—暴击猫

题目大意:打出暴击的概率是 p,无 buff 加成的普通暴击伤害倍率是 k,一层 buff 提供的暴击伤害倍率提高 a,buff 最多叠加层数 n。求攻击无限次,装备与不装备该装备的总期望伤害之比。

不会概率论直接自闭了。

其实可以取攻击次数为 107 等等大数,然后计算。

分析如下:

fi 为无限次攻击后,某一次攻击时 buff 有 i 层的概率。那么:

对于 f0,因为无论有多少层 buff,一旦暴击 buff 都清零。对于 f1,是由 buff 为 0 层的状态再加上上一次不是得来。

fn 不能由这个式子计算。因为 buff 的上限是 n,此时再不暴击 buff 层数也不会增加。

可以列方程:

(fn − 1+fn) × (1−p) = fn

解得 fn = (1−p)n

所以一次攻击的期望计算方式是:

可得答案为

时间复杂度:𝒪(n),空间复杂度:𝒪(1)

代码见这里