NOIP2013模擬 飛彈防禦塔

2022-08-18 05:33:14 字數 1441 閱讀 9702

freda的城堡——

「freda,城堡外發現了一些入侵者!」

「喵...剛剛**完了城堡建設的方案數,我要歇一會兒嘛lala~」

「可是入侵者已經接近城堡了呀!」

「別擔心,rainbow,你看呢,這是我剛設計的飛彈防禦系統的說~」

「喂...別賣萌啊……」

freda控制著n座可以發射飛彈的防禦塔。每座塔都有足夠數量的飛彈,但是每座塔每次只能發射一枚。在發射飛彈時,飛彈需要t1秒才能從防禦塔中射出,而在發射飛彈後,發射這枚飛彈的防禦塔需要t2分鐘來冷卻。

所有飛彈都有相同的勻速飛行速度v,並且會沿著距離最短的路徑去打擊目標。計算防禦塔到目標的距離distance時,你只需要計算水平距離,而忽略飛彈飛行的高度。飛彈在空中飛行的時間就是 (distance/v) 分鐘,飛彈到達目標後可以立即將它擊毀。

現在,給出n座飛彈防禦塔的座標,m個入侵者的座標,t1、t2和v,你需要求出至少要多少分鐘才能擊退所有的入侵者。

首先二分時間,接著,就可以吧每個防禦塔分成g個點,g表示在二分出的時間內可以發射多少枚飛彈,然後把每個分出來的點和每個入侵者比較一下,如果這個點在二分出的時間內可以咔擦掉這個入侵者,就將它們連一條邊。

然後。。。

就最大匹配一下就可以啦!

最大匹配可以用網路流或者匈牙利,如果不嫌麻煩的話就用網路流吧。

#include #include #include #include #include #include #include const int maxlongint=2147483647;

using namespace std;

double t1,t2,v,a[60][60],lf[60][3],xhm[60][3];

int n,m,tot,next[800000],to[800000],last[1000000],xyl[800000];

bool used[800000];

double dis(double x,double y,double x1,double y1)

int bj(int x,int y)

bool find(int x)

} }return false;

}bool ddx(double limit)

}} int ans=0;

memset(xyl,0,sizeof(xyl));

for(i=1;i<=int(n*cs+m);i++)

return ans==m*2;

}double rf()

return r;

}int main()

for(i=1;i<=n;i++)

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

double ans;

ans=rf();

printf("%.6lf",ans);

}

模擬 NOIP 2013 花匠

花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h 1,h 2,h n。設當一部分花被移走後,剩下的花的高度依次為g 1,g ...

飛彈防禦塔

freda的城堡遭受了 m 個入侵者的攻擊!freda控制著 n 座飛彈防禦塔,每座塔都有足夠數量的飛彈,但是每次只能發射一枚。在發射飛彈時,飛彈需要 t1 秒才能從防禦塔中射出,而在發射飛彈後,發射這枚飛彈的防禦塔需要 t2 分鐘來冷卻。所有飛彈都有相同的勻速飛行速度 v,並且會沿著距離最短的路徑...

NOI(P)2013模擬 秘密任務

這題是在最短路上研究問題的,所以理所當然要建個圖先。其次我們先考慮費用,看看這圖,再yy一下,那麼我們可以發現這就是典型的最小割問題,可是我們還是要考慮如何判斷這個割是否唯一。首先,大家可以先去看我的另乙個blog,上面有寫類似這樣的判斷最大流是否唯一。其實這兩題是不同的。所以我在考試時就掛了。因為...