qbzt2020五一DAY1T1集合——题解

 

 题解:

  首先考虑如何求出一个集合的优美值:

    可以先将集合的元素从小到大排序,顺序扫描一遍。假设现在的优美值为t,即扫到当前位置最多可以凑出[1,t],那么对于下一个数x:
      如果 x<=t+1,那么这个数加入后可以凑出[1,t+x],答案t=t+x;
      否则能够凑出的部分还是[1,t],答案不变,且不会再变了,退出扫描;
  但现在的情况是,要从另一个集合中拿k个数加入当前集合,再求出当前集合的优美值。可以先求出另一个集合的数加入前的当前集合的优美值t,然后顺序对另一个集合顺序扫一遍(所有集合读入后都要先排好序)、建一个栈,将从另一集合中找到的满足x<=t+1的x放入栈中直到不满足,那么栈顶元素就是最适合放进第一个集合的值。更新t,取出栈顶后继续找,直到放进第一个集合k个值,或是栈空且没有x能满足x<=t+1为止。

复杂度:O(Tm)。

猜你喜欢

转载自www.cnblogs.com/InductiveSorting-QYF/p/12819547.html