欢迎光临散文网 会员登陆 & 注册

Codeforces Round#873 div2 A-B 个人题解 (思维 + 构造)

2023-05-19 10:27 作者:StepfenShawn  | 我要投稿

A. Divisible Array (数学 + 构造)

题意:

构造一个数列an, 满足每个 ai % i == 0, 并且对数列求和Sn % n == 0。

思路: 先考虑构造一个等差数列是否满足条件, 发现当 n 为奇数时, 假如我们将 an 构造成:

1%2C%202%2C%203%2C%204%2C%20...%20n

很显然对每一个 i 都有 ai % i == 0, 对其求和可以发现

%5Cfrac%7Bn(1%2Bn)%7D%7B2%7D

因为 n 是奇数, 所以 (1 + n) 为偶数可以被 2 整除, 那么我们一定可以找到一个整数 k%20%3D%20%5Cfrac%7Bn%20%2B%201%7D%7B2%7D%20 使得 Sn%20%3D%20kn, 所以 Sn 能被 n 整除.

当 n 为偶数时, 不难想到将 an 构造成:

2%2C4%2C6%2C8%2C10%2C%20...%2C%202n

求和为 sn%20%3D%20%5Cfrac%7Bn(2%20%2B%202n)%7D%7B2%7D%20, 我们发现(2 + 2n)一定是偶数, 那么同理我们一定能找到一个整数 k%20%3D%20%5Cfrac%7B2%20%2B%202n%7D%7B2%7D%20 使得 Sn%20%3D%20kn, 所以 Sn 能被 n 整除.

B. Permutation Swap (最小公倍数)

题意:

给你一个n位的排列,要求你找到最大的k使得,只交换下标差等于k的元素即可将该排列转变成有序的。

思路: 之前做过一道类似的(记不清了。。。好像是关于等差数列的), 我们先看看将所有 Pi 移动到正确的位置上时所需最大值 k 要满足怎样的条件。

不难想到对于每一个 pi, 移动到正确的位置需要 abs(pi%20-%20i) 步, 也就是说对于每一个 j, j%20-%20i 必须是 k 的倍数(否则我们不可能构造出排列), 那么问题就转化为求最大公倍数了:


Codeforces Round#873 div2 A-B 个人题解 (思维 + 构造)的评论 (共 条)

分享到微博请遵守国家法律