【4.4】Codeforces 刷题

C. Mere Array

题意:给定序列,当两个元素的 g c d gcd gcd 等于序列最小值时可以交换位置,问是否可以使得序列非降序。

思路:首先,不是最小值的倍数不能交换位置。然后我们发现,可以将最小值与最小值的倍数的元素交换位置,也就是可以通过最小值交换两满足条件的元素。那么判断方式就是看看非最小值的倍数是否位于非降序序列的对应位置。类似于【4.2】Codeforces 刷题 的第一题。

AC代码:https://codeforces.com/contest/1401/submission/152659896


D. Epic Transformation

题意:给定序列,每次操作可以选取两个不相等的元素一同消去,问剩余元素的最小个数。

题解:CF1506D Epic Transformation 题解

思路:当个数最多的元素大于一半时,就用其他元素来消去这个元素。否则,一定有一种消去方式使得最终个数为 0 或 1。

AC代码:https://codeforces.com/contest/1506/submission/152744744


C. Binary String Reconstruction

题意:对于一个 01 串,你可以使用规则来构造新的 01 串。现在给你新串,问你是否能反向构造出原来的 01 串。
规则:1.如果 w i − x w_{i-x} wix 存在并且等于 1,那么 s i s_i si 则等于 1 。
2.如果 w i + x w_{i+x} wi+x 存在并且等于 1 ,那么 s i s_i si 则等于 1 。
3.如果前两种情况都不存在,那么 s i s_i si 则等于 0 。

题解:Binary String Reconstruction

思路:见题解。根据限制来判断出某些位是 0 或 1,然后再判断反构造的原串是否可以构造出新串。

AC代码:https://codeforces.com/contest/1400/submission/152715215


A. Multiples of Length

题意:给你一个长度为n的数组,让你进行三次操作,每次操作选择一个l到r的区间,这段区间内的元素都要加上或者减去这段长度的倍数(0也算),求构造出三个操作使得最终数组全部归零。

题解:CF1396A Multiples of Length 题解

思路:见题解。选择长度为 n − 1 n-1 n1 的区间各加上 ( n − 1 ) × a i (n-1) \times a_i (n1)×ai ,就是 n n n 的倍数了,然后构造。

AC代码:https://codeforces.com/contest/1396/submission/152716616


C. Array Destruction

题意:给出一个长度为 2 n 2n 2n 的正整数序列,现在问你是否存在并构造一个 x x x 使得可以不断的进行如下操作,直到这个序列变为空:
从序列中找到两个数字 a 1 , a 2 a_1, a_2 a1,a2 ,使得 a 1 + a 2 = x a_1+a_2=x a1+a2=x ,然后从序列中删掉这两个数字, x x x 的值也被更新, x = m a x ( a 1 , a 2 ) x = max(a_1, a_2) x=max(a1,a2)

思路:首先发现性质:每次选择的数对一定要包括当前序列最大值,因为如果不包括,则后续 a 1 + a 2 = x a_1+a_2=x a1+a2=x 就不可能满足了。然后枚举最大值的匹配数,就可以按照性质一直推下去。时间复杂度 O ( n 2 ) O(n^2) O(n2)

AC代码(顺便练了一下 multiset):https://codeforces.com/contest/1474/submission/152731966

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值