因為本題的時間點較多,不能列舉,但發現有單調性,於是二分答案,二分使用的時間ttt
每個攻擊裝置造成的傷害總量已知,為t∗b
it*b_i
t∗bi
,現在有了傷害總量、生命總量,如何判斷在t
tt時間內,機械人是否被全部打死?
源點s向所有攻擊裝置連邊,流量為t∗b
it*b_i
t∗bi
攻擊裝置向能攻擊到的機械人連邊,流量為inf
所有機械人向匯點t連邊,流量為a
ia_i
ai驗證t
tt時間所有機械人都能***當且僅當上圖的最大流=∑a
i= \sum a_i
=∑ai
(所有機械人生命值之和)
#include
#include
#include
#include
#include
#include
#include
#include
#define maxn 110
#define inf 0x7fffffffffffffffll
using
namespace std;
int n,m,s,t,d[maxn]
;long
long sum,ans,sum_a;
long
long a[maxn]
;long
long b[maxn]
;int mp[maxn]
[maxn]
;struct edge};
vector e[maxn]
;void
add(
int x,
int y,
long
long val)
bool
bfs()}
}if(d[t]==-
1)return0;
else
return1;
}long
long
dfs(
int x,
long
long low)}if
(low!=0)
d[x]=-
1;return totflow;
}boolpd(
long
long time)
if(ans==sum_a*
10000
)return1;
else
return0;
}int
main()
for(
int i=
1;i<=m;i++
)scanf
("%lld"
,&b[i]);
for(
int i=
1;i<=m;i++
)for
(int j=
1;j<=n;j++
)scanf
("%d"
,&mp[i]
[j])
;long
long l=
0,r=
10000000000000ll
;long
long an=l;
while
(l<=r)
else
l=mid+1;
}printf
("%.6lf\n",(
double
)an/
(double
)10000.0);
return0;
}
洛谷P3324 SDOI2015 星際戰爭
類似 飛彈防禦塔 因為題目保證有解,花費時間小於最終答案時一定無法消滅所有敵人,只要花費時間大於等於最終答案都可以消滅所有敵人,答案滿足單調性,考慮二分答案。二分答案後,轉化為判定性問題。當總時間固定,每件 的總傷害量就確定了。於是可以按網路流建模 把 和敵人分成兩部分,從源點s向 連邊,容量為該 ...
洛谷P3322 SDOI2015 排序
小a有乙個1 2n的排列a 1.2n 他希望將a陣列從小到大排序,小a可以執行的操作有n種,每種操作最多可以執行一次,對於所有的 i 1 i n 第i中操作為將序列從左到右劃分為2段,每段恰好包括2個數,然後整體交換其中兩段.小a想知道可以將陣列a從小到 大排序的不同的操作序列有多少個,小a認為兩個...
洛谷P2434 SDOI 區間
解題思路 這道題就是簡單的模擬啊。不過愣是沒有模擬對,看來還需要加強 實現能力。先按照左端點從小到大排序,每次驗證當前區間左端點是否大於設定的右端點,如果大於,說明不相交,就輸出設定的左右端點,如果小於等於,說明有相交的部分,不斷更新右端點。include include include inclu...