Codeforces Round 640 (Div. 4)
A. Sum of Round Numbers
思路:
- 把输入的数拆分为单个整体,例如,
5031 => 5000 30 1
,就按照这个思路拆分数位即可
时间复杂度:\(O(len(n))\)
1 | void solve() { |
B. Same Parity Summands
思路:
- 所有数要求是正整数,直接用最小的奇数
1
和最小的偶数2
,然后判断这两种情况中的任意一种是否存在即可
时间复杂度:\(O(k)\)
1 | void solve() { |
C. K-th Not Divisible by n
思路:
- 对于一个数
x
,小于等于x
的正整数,且不能被x
整除的数,有x - 1
个,那么第k
个不能被x
整除的数的位置即为k / (n - 1) * n + (k == 0 ? -1 : k)
时间复杂度:\(O(1)\)
1 | void solve() { |
D. Alice, Bob and Candies
思路:
- 按照题目意思模拟即可,双向开始互相吃糖果
时间复杂度:\(O(n)\)
1 | void solve() { |
E. Special Elements
思路:
n
为8000
,可以暴力求解,我们只需要枚举左右端点,然后用hash
表来 \(O(1)\) 的查询这个区间和是否等于数组中的任意一个数即可
时间复杂度:\(O(n^2)\)
1 | void solve() { |
F. Binary String Reconstruction
思路:
- 首先,我们观察
n1
的值,如果n1
为0
,那么n0
和n2
一定有一个也是0
,这种情况直接特判即可 - 然后我们根据
n1
的值,来创建一个满足条件的01
序列,然后我们在把n0
和n2
的全0
或全1
的序列加在任意一个0
或1
的旁边,这样不会改变n1
和n0
以及n2
的数量
时间复杂度:\(O(max(n_i))\)
1 | void solve() { |
G. Special Permutation
思路:
- 按照题目意思,找到一个序列满足 \(2 \le |a_i - a_{i - 1}| \le 4\) ,我们推一下满足条件的序列,可以猜到从大到小一半,然后从小到大再回去,按照奇偶性的不同
时间复杂度:\(O(n)\)
1 | void solve() { |