洛谷P3324 SDOI2015 星際戰爭 題解

2021-09-19 08:00:20 字數 1840 閱讀 3474

因為本題的時間較多,不能列舉,但發現有單調性,於是二分答案,二分使用的時間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...