Codeforces Round 786 (Div. 3)
A. Number Transformation
思路:
- 数据范围较小,可以直接枚举底数和指数
时间复杂度:\(O(1)\)
1 | void solve() { |
B. Dictionary
思路:
- 预处理一下所有的两个字母组成的字符串,然后枚举查找
时间复杂度:\(O(n)\)
1 | std::vector<std::string> sk; |
C. Infinite Replacement
思路:
- 本题主要涉及组合数,可以发现,只要 \(t\) 中包含字符 \(a\),那么一定是不可能的
- 如果 \(t\) 等于 \(a\) 那么不可能会继续增加,所以只要原本的一个字符串 \(s\)
- 如果 \(t\) 中不包含 \(a\) 那么数量一定是 \(\Sigma_{i=0}^{n}C_{n}^{i}\)
时间复杂度:\(O(n)\)
1 | i64 C[60][60]; |
D. A-B-C Sort
思路:
- 感觉这题非常巧妙,它通过一个
B
数组来误导我们,最后可以发现,其实A
中的相邻的数组元素就是B
中相邻元素,只不过位置可能不相同,然后判断如果出现逆序,就互相换个位置 - 最后判断是否有序即可
时间复杂度:\(O(n)\)
1 | void solve() { |