概述
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}
wi−x 存在并且等于 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 n−1 的区间各加上 ( n − 1 ) × a i (n-1) times a_i (n−1)×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
最后
以上就是笨笨歌曲为你收集整理的【4.4】Codeforces 刷题的全部内容,希望文章能够帮你解决【4.4】Codeforces 刷题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复