题目名称 1884. [国家集训队2011]CounterStrike
输入输出 nt2011_cs.in/out
难度等级 ★★★★
时间限制 1000 ms (1 s)
内存限制 512 MiB
测试数据 20
题目来源 Gravatarcstdio 于2014-12-17加入
开放分组 全部用户
提交状态
分类标签
计算几何
分享题解
通过:3, 提交:9, 通过率:33.33%
GravatarMarshmello 100 0.000 s 0.00 MiB C++
Gravatarmikumikumi 100 0.319 s 2.15 MiB C++
Gravatar张灵犀不和我一般见识真可怕呢(笑 100 0.326 s 2.15 MiB C++
Gravatar张灵犀不和我一般见识真可怕呢(笑 95 0.295 s 2.15 MiB C++
Gravatar张灵犀不和我一般见识真可怕呢(笑 95 0.296 s 2.15 MiB C++
GravatarMarshmello 90 0.000 s 0.00 MiB C++
GravatarMarshmello 80 0.000 s 0.00 MiB C++
Gravatar张灵犀不和我一般见识真可怕呢(笑 65 0.279 s 2.15 MiB C++
GravatarMarshmello 0 0.000 s 0.00 MiB C++
关于 CounterStrike 的近10条评论(全部评论)
为什么人类要互相伤害
Gravatarmikumikumi
2016-03-27 21:27 1楼

1884. [国家集训队2011]CounterStrike

★★★★   输入文件:nt2011_cs.in   输出文件:nt2011_cs.out   简单对比
时间限制:1 s   内存限制:512 MiB

【试题来源】

2011中国国家集训队命题答辩

【问题描述】

在Counter Strike(反恐精英)的cs_assault地图里有这样的场景:

图中的管道是外界进入这个仓库的路径之一。但是这条管道十分狭窄,遭枪击时根本无处躲避。于是gx就拿了一把枪守在管道的这一端,一旦对面出现敌人就马上开枪。导致试图从此处进入的敌人无一幸免。
对方纷纷表示用这种方式防守太无聊了,他们对这个管道进行了一些修改。我们用三维直角坐标系描述这个管道,如下图所示:


1.管道从y轴负方向延伸到y轴正方向。
2.称x轴负方向为左边,x轴正方向为右边,z轴正方向为上边,z轴负方向为下边。
3.管道是由若干四棱柱拼接而成,每个四棱柱的两个底面都是边长为1的正方形,且这两个底面都平行于xoz平面。也就是说,对于管道的任何一个垂直于y轴的的截面,它都是正方形,只要知道右上角顶点的坐标(x,y,z)就可以知道正方形剩下三个点的坐标(x-1,y,z), (x,y,z-1), (x-1,y,z-1)。
4.知道了管道右上方的折线,通过向左平移1、再向下平移1、再向右平移1,再向上平移1,可以得到该管道的边界。所以给出管道右上方的折线的每个顶点的坐标,我们就可以确定整个管道的形状。

对于gx的枪,有如下说明:
1.gx的枪沿一条直线射出一颗子弹。我们把子弹视作是一个半径为r的圆,所以轨迹可以视作一个底面半径为r的狭长圆柱。对于某个y=y0的截面,如果子弹能够完整地通过,称此处是被gx控制的。反之,子弹在接触目标前会发生偏折,因此该截面是不被控制的。子弹刚好擦边而过的情况也算作可以通过。
2.gx站在y轴负方向的那一端,面向y轴正方向。gx的枪可以在管道外任何位置以任何角度,从y轴负方向向y轴正方向进行瞄准。

现在面对这个蜿蜒曲折的管道,gx想知道他能控制的最远截面的y坐标值是多少。

【输入格式】

输入的第一行包含整数n和实数r。
接下来n行每行三个实数,第i行的三个实数表示第i个正方形右上角顶点的坐标(x, y, z)。输入保证y坐标值是严格递增的。

【输出格式】

输出一个实数,表示最远的控制点。保留三位小数。数据保证gx的子弹不能贯穿整个管道。

【样例输入】

5 0
0.0 -2.0 1.0
0.0 0.0 1.0
1.0 1.0 0.0
0.0 1.5 1.0
2.0 3.0 0.0

【样例输出】

2.250

【样例说明】

沿y轴正方向,最远可以控制到y=2.250
(图示见问题描述)

【样例输入】

3 0.2
0.0 0.0 1.0
0.0 1.0 1.0
2.0 2.0 -1.0

【样例输出】

1.374

【数据规模和约定】

对于10%的数据 n=3
对于50%的数据 n≤500
对于100%的数据 3≤n≤20000, 0≤r≤0.5, -100000≤xi, yi, zi≤100000
均匀分布着50%的数据 r=0