【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

相關文章
相關標籤/搜索