【BZOJ-2864】战火星空 计算几何 + 最大流

2864: 战火星空

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 33  Solved: 14
[Submit][Status][Discuss]

Description

APIO回来以后,XX便迷上了“战火星空”这个游戏。php

原版战火星空中,有一架小飞机和一个Boss,玩家控制小飞机来对Boss进行射击。然而,这种“一对一”的游戏已经让XX乏味,因而XX基于原版战火星空,将其增强创造了一款新版战火星空。网络

新版战火星空中,有N个Boss和M架小飞机。在游戏过程当中,Boss的位置不会改变,而小飞机在从(Sx, Sy)到(Ex, Ey)的线段以速度V匀速飞行,并在到达终点后从地图上消失;小飞机的子弹具备R的射程,在任意时刻,小飞机能够向在射程内的Boss射击;而为了使实力更加均衡,游戏还规定在任意时刻,每一个Boss只能被一架小飞机做为目标射击;每架小飞机也有一个能量值E的限制,若某时刻小飞机向K个Boss射击,则每秒须要消耗K个单位的能量,全部能量消耗完以后小飞机再也不可以进行射击。spa

在游戏开始前,XX知道了全部Boss的位置,以及每架小飞机的飞行路线以及各项属性,他想知道全部Boss被攻击的总时间最大是多少,你能帮助他吗?游戏

Input

第一行包含两个整数N,M,分别表示Boss和小飞机的个数。ip

接下来N行,每行一个正整数点坐标(x, y),表示Boss所在的位置。get

接下来M行,每行七个正整数:Sx, Sy, Ex, Ey, V, R, E,表示每架小飞机的运动路线、速度、射程以及能量值。it

Output

输出一个实数,表示全部Boss被攻击的最大总时间,保留6位小数。io

Sample Input

样例1:
1 1
2 2
1 1 5 3 2 1 2

样例2:
2 4
12 10
7 5
10 10 12 10 1 1 3
6 1 8 10 1 2 3
3 6 8 2 5 3 1
42 42 42 42 6 6 6

Sample Output

样例1:

0.894427

样例2:

4.983771

HINT

对于30%的数据,保证每一个Boss在任意时刻只在最多一架小飞机的射程范围内。对于100%的数据,1≤N,M≤20,输入的全部数均为正整数,且不超过1000。class

Source

Solution

计算几何+网络流..im

网络流的部分比较简单,就是S到每一个飞机连容量,每一个能攻击到boss的时间段连T,容量为时间长度,而后由飞机向时间段连边便可。

这里只要求出对于每一个boss每一个飞机能攻击到的时间段便可。

飞机的飞行路线是一条线段,攻击范围是一个半径为r的圆,那么其实能够枚举每一个boss,以boss为圆心求出与这条线段的交点,进而求出可攻击时间。

圆和线段求交就能够直接利用法向量求出垂足,而后勾股求出距离以后,特判一下方向什么的就能够了,而后在和这个飞机的最短最长时间取一下交就能够了。

Code

相关文章
相关标签/搜索