AtCoder Beginner Contest 338
A. Capitalized?
思路:
- 模拟题意即可
时间复杂度:\(O(n)\)
1 | signed main() { |
B. Frequency
思路:
- 记录字符串中所有字符的出现次数,找到字典序最小的那个即可
时间复杂度:\(O(n)\)
1 | signed main() { |
C. Leftover Recipes
思路:
- 首先注意数据范围 \(N \le 10\) ,运用数学推导,可以发现我们需要求的东西是 \(A_ix+B_iy \le Q_i \Rightarrow B_iy \le Q_i - A_ix\) ,所以我们要求的就是 \(x+y\) 的最大值
- 所以我们可以枚举 \(x\),首先当 \(Q_i - A_ix \lt 0\) ,那么 \(A\) 菜不能做,就舍弃这个值,所以现在的 \(Q_i-A_ix \ge 0\) 代表所有的 \(i\) 。
- 如果 \(B_i=0\) 那么我们可以制作任意份数的 \(B\) 菜,否则,我们最多制作 \(\lfloor \frac{(Q_i-A_ix)}{B_i} \rfloor\) 份 \(B\) 菜,而且不会用完配料 \(i\),如果我们对所有的食材都这么计算,那么就可以求出 \(y\) 的最大值。
时间复杂度:\(O(n * mx)\)
1 | constexpr i64 inf = 1LL << 60; |
D. Island Tour
思路:
- 这 \(n\) 个点围成一个圈,每次删除的哪个点,我们可以从 \(a \rightarrow a-1 \rightarrow a-2 \rightarrow ...\rightarrow b\) 或者从 \(a \rightarrow a+1 \rightarrow a+2 \rightarrow ... \rightarrow b\) ,我们可以将其划分为两个集合。
时间复杂度:\(O(m)\)
1 | constexpr i64 inf = 1LL << 60; |
E. Chords
思路: