ABC245 D-G 题解
ABC245 D-G 题解
D - Polynomial division
题目大意
假如给两个多项式,分别为\(A(x) = A_n x^n + \cdots +A_0\), \(B(x) = B_m x^m + \cdots + B_0\)。
他们之间相乘会得到:
\[C(x) = A_n \cdot B_m x^{n+m} + \cdots + A_0 \cdot B_0 \]现在,给出\(A(x), C(x)\)求\(B(x)\)的每个系数。
思路
很简单,从高位往低位考虑\(C(x)\),便可计算出\(B(x)\),就解决了。
E - Wrapping Chocolate
题目大意
给定\(n, m\)个巧克力和盒子。他们都是长方形,形如:\((width, length)\)。
盒子\(B(w_B, l_B)\)能装下巧克力\(C(w_C, l_C)\),当且仅当:\(w_B \ge w_c \and l_B \ge l_C\)。
求问\(m\)个盒子能否装下这\(n\)个巧克力。
- \(1\le N \le M \le 2 \times 10^5\)
思路
这题是一个 二维偏序问题,很遗憾我又写挂了。
做二维偏序问题,目前看来套路有点类似,就是先排序,降维之后再顺着排序好的数组遍历处理。
这题,我们先定义巧克力和盒子都是形如:\((width, length, type)\).
然后将巧克力,盒子放在一个数组中,按width
降序排序。
如果存在巧克力的width
等于盒子的width
,那么将盒子放在前面。
为什么要这样做呢?
接下来,我们维护一个multiset
\(S\),每次处理一个元素:
- 如果是盒子,我们直接将
length
插入到 \(S\) 中。 - 如果是巧克力:显然,目前\(S\)中的盒子的
width
都是大于当前巧克力的width
的,只需要考虑length
即可,本着贪心的策略,我们需要在\(S\)中找到一个大于巧克力length
且大于最小的盒子,这其实就lower_bound
就好了。- 如果
lower_bound
找到该元素,erase
并继续。 - 如果找不到,说明也不会有其他盒子能装这个巧克力,结束并输出
No
。
- 如果
这样直接\(\mathcal{O}((n+m) \times \log (n +m))\)结束。
F - Endless Walk
题目大意
给一个有向图\(G\),找到可以进入环的结点数量。
- \(1 \le N \le 2 \times 10^5\)
思路
拓扑就好了,维护一个flag
数组。维护不同的状态:
-1
,当前结点在栈中,找到了一个环。0
,没有访问过。1
,访问完了,无法进入一个环。2
,访问完了,走该结点一定可以进入环。
然后再稍微注意下dfs
时的维护即可。
G - Foreign Friends
候补,题解有点没看懂~