简单场...讲讲不会做的题。
ps:没看懂( ext{N})的题意...
A
题意:
一天有(m)个小时:([0,m])
有(n)个工人,工作时间为([a_i,b_i](a_i< b_i)),现在新加入一个工人,这个公司有个规定,希望每个人工作时间不少于(K)。
但他们检查工人是否符合条件,是通过监督机制,具体而言,若一个工人工作时间为([x,y]),仅发生以下情况时,视为不符合条件:
(1)(y-x< K),(exists i),( ext{s.t.} a_ile x < yle b_i)。换言之,有工人亲眼目睹其工作时长(< K)
(2)(y < K),(exists i),( ext{s.t.} x< a_ile yle b_i)。
(3)(x>m-K),(exists i),( ext{s.t.} a_ile xle b_i < y)
(4)(exists i),( ext{s.t.} a_ile K,b_ige m-K)且(y<a_i~ ext{or}~b_i<x)。
这种题居然没做出来...
将((x,y)(xle y))看作二维平面上的点,将非法的部分并起来,然后求合法的((x,y)(y-x))最小。
(2)(3)(4)的部分是矩形,但(1)的部分是个梯形这样的东西。
关键的一步是(1)是限制(y-x< K)的,我们直接将([a_i,b_i] imes [a_i,b_i])直接视为不合法。初始化答案为(K)。
将可能的关键点拉出来离散化,然后矩阵并(O(nlog n))。
H
直接看这篇博客吧
I
题意:
有(n)个人,(K)台电脑,(n)个人两两之间都要使用一台电脑对决过,问最少多少轮,并输出方案。
两个人使用同一台电脑,一轮中同一个人不能使用过两台电脑。
考虑(K=frac{n}{2})的方案:初始时将(n)个人排成任意序列(a_{1},ldots,a_{n/2},b_1ldots,b_{n/2})。(若(n)是偶数则末尾补一个虚节点)
第一轮(a_i ext{vs} ~b_{i})。
之后的每一轮,固定(a_1),(b_1,ldots,b_{n/2},a_{n/2},ldots,a_2)顺时针移动一步,即((a_1 ext{vs} ~a_2),(a_3 ext{vs}~b_1),ldots (a_{n/2} ext{vs}~b_{n/2-2}),(b_{n/2} ext{vs}~b_{n/2-1}))。
将每一轮有效的依次拼起来
对于(Kle frac{n}{2}),每(K)个一块,容易证明每一块没有两个相同的。
讲得不太清楚,可以看下代码