#P16650. [Ukiepc2016]Build a Boat
[Ukiepc2016]Build a Boat
题目描述
一名全面发展的软件工程师在训练过程中,往往还需要花费漫长而重要的几个月学习造船技术——虽然这部分常常被人遗忘。
现代船只非常安全,几乎不会沉没。即使发生正面碰撞,也可以依靠船体内部的一系列水密舱壁挽救船只。水密舱壁是船体内部经过加固的竖直隔断,用来阻止进入船内的水蔓延到其他区域。
一艘崭新的大型船只已经由一群才华横溢的艺术家完成了横截面设计。不过,他们只顾着绘制优美的船体曲线,并没有确定水密舱壁应当放置在哪里。
现在需要你完成这项工作:
- 求出最多能够把船体划分成多少个舱段;
- 求出各个水密舱壁的准确横坐标。
每个舱段的横截面积都必须相等,并且不能小于给定值 。
输入格式
- 第一行包含一个整数 (),表示每个舱段允许的最小横截面积。
- 第二行包含一个整数 (),表示船体横截面多边形的顶点数。
- 接下来 行,每行包含两个整数 (),表示船体外壳上的一个顶点。顶点按照逆时针顺序给出。
船体形状在水平方向上不会折返。也就是说,对任意横坐标作一条竖直直线,这条直线穿过船体内部的部分至多只有一段,不会先进入船体、离开后又再次进入。
保证船体至少能够被划分成一个满足要求的舱段。
输出格式
- 第一行输出一个整数 ,表示最多能够划分出的舱段数量。保证 。
- 接下来输出 行,每行输出一个实数,表示一面水密舱壁的横坐标。
这些舱壁必须把船体划分成 个面积完全相等的舱段,且横坐标应按递增顺序输出。
答案的绝对误差或相对误差不得超过 。
样例 1
输入
50
4
110 10
80 10
80 0
110 0
输出
6
85
90
95
100
105
样例 2
输入
24
3
10 10
30 10
20 20
输出
4
17.071067
20
22.928932
样例 3
输入
1280
10
100 120
97 50
94 99
74 97
50 87
29 71
13 50
3 26
0 0
100 0
输出
6
27.5015466
44.3204382
59.0041321
72.7008423
85.8494453