真 口胡选手(赛后补交全挂了,做了 $3$ 个假题可太 zz 了
A Serval and Bus
有 $n$ 个班车,始发时间 $s_i$,之后每隔 $t_i$ 发一班,求一个人在 $t$ 时候最早在何时上车。
求一下上车时间的最小值。
如果还未发车,在上车时间为始发时刻;否则,求下一辆车何时到达,上取整即可。
B Serval and Toy Bricks
C Serval and Parenthesis Sequence
给定一个长度为 $n$ 的括号序列,其中某些位置不确定,求一个匹配的括号序列,使得其自身外每个前缀都不匹配。
显然尽量选左括号即可。
D Serval and Rooted Tree
给定一棵 $n$ 个点的有根树,每个点上有一个标记 $\min$ 和 $\max$,有 $k$ 个叶子,每个叶子安排一个 $1$ 到 $k$ 的权值。
对于每个非叶子结点,他的权值是对其儿子做 $\min$ 或 $\max$ 操作,求根节点的最大权值。
对于每个结点维护其至少小于等于几个数。
一开始,对于叶子结点显然小于等于其自身。
考虑非叶子结点,如果是取 $\max$ 操作,则会从叶子里取一个小于等于个数最少的,如果是取 $\min$ 操作,由于子树之间不相交,需要把每个儿子小于等于个数加起来即可。
E Serval and Snake
给了一个 $n \times n$ 的网格图,上面有一条蛇,你需要找到这个蛇的两端。
询问至多 $2019$ 次,每次询问一个矩形边框和蛇的相交次数,其中 $2\le n \le 1000$。
首先询问左边一整块,如果相交次数为奇数,那么两端一定分布在分界线两边,否则在同侧。
假设两端不在同一列,在询问情况一定是,某一个前缀一直是偶数,某一个后缀一直是偶数,只有中间是奇数,则这两个分界线上分别有 $1$ 个端点。
对于行,同样做这件事,询问次数至多为 $1998$ 次。
这样,我们会扣出 $4$ 条分界线,就有两组解,询问一下某个点,显然如果是头尾的话,则相交次数一定为 $1$,这样就找到了端点。
如果在同一行或者同一列,则有一个方向没有分界线。
最后这 $20$ 次询问,用来二分得到那个对应位置。
我们注意到同上类似的事情,如果一个矩形内仅有 $1$ 个端点,则相交次数一定为奇数,用这个条件二分即可。
代码
A
1 |
|
B
1 |
|
C
1 |
|
D
1 |
|
E
1 |
|