bzoj3993 SDOI2015 星際戰爭

2021-08-16 23:47:13 字數 1508 閱讀 2176

2023年,在銀河系的某星球上,x軍團和y軍團正在激烈地作戰。在戰鬥的某一階段,y軍團一共派遣了n個巨型機械人進攻x軍團的陣地,其中第i個巨型機械人的裝甲值為ai。當乙個巨型機械人的裝甲值減少到0或者以下時,這個巨型機械人就被摧毀了。x軍團有m個雷射**,其中第i個雷射**每秒可以削減乙個巨型機械人bi的裝甲值。雷射**的攻擊是連續的。這種雷射**非常奇怪,乙個雷射**只能攻擊一些特定的敵人。y軍團看到自己的巨型機械人被x軍團乙個乙個消滅,他們急需下達更多的指令。為了這個目標,y軍團需要知道x軍團最少需要用多長時間才能將y軍團的所有巨型機械人摧毀。但是他們不會計算這個問題,因此向你求助。

對於全部的資料,1<=n, m<=50,1<=ai<=105,1<=bi<=1000,輸入資料保證x軍團一定能摧毀y軍團的所有巨型機械人

滯漲選手總是弄不清n和m的區別(比如我)

容易發現乙個雷射造成的傷害=單位時間傷害*時間,那麼考慮二分答案時間t跑最大流就行

乙個技巧就是不用小數直接乘10000倍這樣

滯漲選手總是弄不清n和m的區別(比如我)

#include 

#include

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

#define fill(x,t) memset(x,t,sizeof(x))

typedef

long

long ll;

const ll inf=50000000000000ll;

const

int n=205;

const

int e=20005;

struct edge e[e];

intqueue[n],head,tail;

int dis[n],can[n][n];

int ls[n],edcnt;

ll a[n],b[n],tot;

void addedge(int x,int y,ll w) ; ls[x]=edcnt;

e[++edcnt]=(edge) ; ls[y]=edcnt;

}bool bfs(int st,int ed) }}

return

false;

}ll find(int now,int ed,ll mn)

}return ret;

}ll dinic(int st,int ed)

return ret;

}bool check(int n,int m,ll lim)

ll mxflow=dinic(0,n+m+1);

if (mxflow>=tot) return

true;

return

false;

}void solve(int n,int m)

double prt=(double)(r)/10000.0;

printf("%.4lf\n", prt);

}int main(void)

BZOJ3993 SDOI2015 星際戰爭

bzoj3993 sdoi2015 星際戰爭 3333年,在銀河系的某星球上,x軍 和y軍 正在激烈地作戰。在戰鬥的某一階段,y軍 一共 遣了n個巨型機械人進攻x軍 的陣地,其中第i個巨型機械人的裝甲值為ai。當乙個巨型機械人的裝甲值減少到0或者以下時,這個巨型機械人就被摧毀了。x軍 有m個雷射 其...

SDOI2015 BZOJ3993 星際戰爭

time limit 10 sec memory limit 128 mbsec special judge submit 201 solved 119 submit status discuss 3333年,在銀河系的某星球上,x軍 和y軍 正在激烈地作戰。在戰鬥的某一階段,y軍 一共 遣了n個巨...

3993 SDOI2015 星際戰爭

time limit 10 sec memory limit 128 mbsec special judge submit 1069 solved 489 submit status discuss 3333年,在銀河系的某星球上,x軍團和y軍團正在激烈地作戰。在戰鬥的某一階段,y軍團一共派遣了n個...