【NOI2017】分身术 排行榜
时间限制: 3 s
空间限制: 524288 KB
题目描述
"分!身!术!" —— 小P
平面上有 $n$ 个小P的分身。定义一组分身占领的区域为覆盖这组分身的最小凸多边形。小P能力有限,每一时刻都会有若干分身消失。但在下一时刻之前,小P会使用
"分!身!术!"
使得这些消失的分身重新出现在原来的位置。小P想知道,每一时刻分身消失后,剩下的分身占领的区域面积是多少?
输入格式
从标准输入读入数据。
输入第一行包含两个正整数 $n, m$,描述初始时分身的个数,和总时刻数。
接下来 $n$ 行,第 $i$ 行有两个整数 $x_i, y_i$ ,描述第 $i$ 个分身的位置。
接下来 $m$ 行,每行的第一个整数 $k$ 表示这一时刻有 $k$ 个分身消失。接下来有 $k$ 个非负整数 $c_1,c_2,\cdots c_k$,用于生成消失的分身的编号。
生成方式如下:
设上一个时刻中,分身占领面积的两倍为 $S$。则该时刻消失的分身 $p_{1}, p_{2}, \dots, p_{k}$ 的编号为:
$$p_i = [(S + c_i) ~\mathrm{mod}~ n] + 1$$
特别的,在第一个时刻,我们认为上一个时刻中, $S=-1$ ,即:第一个时刻消失的分身 $p_{1}, p_{2}, \dots, p_{k}$ 的编号为:
$$p_i = [(-1+c_i) ~\mathrm{mod}~ n] + 1$$
输出格式
输出到标准输出。
按给出时刻的顺序依次输出 $m$ 行,每行一个整数,表示该时刻剩余分身所占领区域面积的两倍。
样例输入
样例输出
数据范围
测试点编号 | $n$ | $m$ | $k$ |
---|---|---|---|
1 | 10 | 10 | $\leq n - 3$ |
2 | 1000 | 1000 | |
3 | |||
4 | |||
5 | 100000 | 100000 | $=1$ |
6 | |||
7 | |||
8 | |||
9 | $=2$ | ||
10 | |||
11 | $\leq 3$ | ||
12 | $\leq 5$ | ||
13 | $\leq 9$ | ||
14 | $\leq 12$ | ||
15 | $\leq 20$ | ||
16 | $\leq 100$ | ||
17 | |||
18 | |||
19 | |||
20 |
对于所有数据,保证:
- $|x_i|, |y_i|\leq 10^{8}$;
- 没有两个分身的坐标是完全相同的;
- $k \leq 100$;
- 所有时刻的 $k$ 之和不超过 $2 \times 10^{6}$;
- $0 \leq c_i \leq 2^{31}-1$;
- 初始时,所有的 $n$ 个分身占据区域面积大于 $0$;
- 定义所有 $n$ 个分身所占据区域的顶点集合为 $S$, $|S|\geq 3$。在任意时刻,$S$ 中至少存在两个未消失的分身。
题目来源
NOI 2017 Day 2
关于接口中的数组初值说明(最后更新:2023年2月6日)
若题目要求实现函数接口,且该函数中存在仅用于输出的数组(如 void solve(int n, const int *in, int *out)
中的 out
),那么除非另外说明,否则该数组在程序启动时的初值为 0
。
关于标准输出的说明(最后更新:2018年10月23日)
标准输出将被重定向到内存中,所以你的内存使用量也包括了你的标准输出的大小(向上取整到 4KB 的倍数)。
如果你的程序要进行大量输出,请考虑这一点。
关于提交的说明
你提交的代码将会被公开,所有人都可见。如果这不是你所期望的,或者如果想要删除已提交的代码,请联系管理员。
Judge Duck Online | 评测鸭在线
Server Time: 2024-11-25 06:20:42 | Loaded in 0 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠