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,上面有寫類似這樣的判斷最大流是否唯一。其實這兩題是不同的。所以我在考試時就掛了。因為...