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

候补,题解有点没看懂~

posted @ 2022-03-28 15:58  Last_Whisper  阅读(72)  评论(0编辑  收藏  举报