Samara Farewell Contest 2020

简单场...讲讲不会做的题。
ps:没看懂\(\text{N}\)的题意...

A

题意:
一天有\(m\)个小时:\([0,m]\)
\(n\)个工人,工作时间为\([a_i,b_i](a_i< b_i)\),现在新加入一个工人,这个公司有个规定,希望每个人工作时间不少于\(K\)
但他们检查工人是否符合条件,是通过监督机制,具体而言,若一个工人工作时间为\([x,y]\),仅发生以下情况时,视为不符合条件:
(1)\(y-x< K\)\(\exists i\)\(\text{s.t.} a_i\le x < y\le b_i\)。换言之,有工人亲眼目睹其工作时长\(< K\)
(2)\(y < K\)\(\exists i\)\(\text{s.t.} x< a_i\le y\le b_i\)
(3)\(x>m-K\)\(\exists i\)\(\text{s.t.} a_i\le x\le b_i < y\)
(4)\(\exists i\)\(\text{s.t.} a_i\le K,b_i\ge m-K\)\(y<a_i~\text{or}~b_i<x\)

这种题居然没做出来...

\((x,y)(x\le y)\)看作二维平面上的点,将非法的部分并起来,然后求合法的\((x,y)(y-x)\)最小。

(2)(3)(4)的部分是矩形,但(1)的部分是个梯形这样的东西。
关键的一步是(1)是限制\(y-x< K\)的,我们直接将\([a_i,b_i]\times [a_i,b_i]\)直接视为不合法。初始化答案为\(K\)

将可能的关键点拉出来离散化,然后矩阵并\(O(n\log n)\)

H

直接看这篇博客

I

题意:
\(n\)个人,\(K\)台电脑,\(n\)个人两两之间都要使用一台电脑对决过,问最少多少轮,并输出方案。
两个人使用同一台电脑,一轮中同一个人不能使用过两台电脑。

考虑\(K=\frac{n}{2}\)的方案:初始时将\(n\)个人排成任意序列\(a_{1},\ldots,a_{n/2},b_1\ldots,b_{n/2}\)。(若\(n\)是偶数则末尾补一个虚节点)
第一轮\(a_i\text{vs} ~b_{i}\)
之后的每一轮,固定\(a_1\)\(b_1,\ldots,b_{n/2},a_{n/2},\ldots,a_2\)顺时针移动一步,即\((a_1\text{vs} ~a_2),(a_3\text{vs}~b_1),\ldots (a_{n/2}\text{vs}~b_{n/2-2}),(b_{n/2}\text{vs}~b_{n/2-1})\)

将每一轮有效的依次拼起来
对于\(K\le \frac{n}{2}\),每\(K\)个一块,容易证明每一块没有两个相同的。

讲得不太清楚,可以看下代码

posted @ 2021-04-25 15:06  Grice  阅读(139)  评论(0编辑  收藏  举报