2023年,在銀河系的某星球上,x軍團和y軍團正在激烈地作戰。在戰鬥的某一階段,y軍團一共派遣了n個巨型機械人進攻x軍團的陣地,其中第i個巨型機械人的裝甲值為ai。當乙個巨型機械人的裝甲值減少到0或者以下時,這個巨型機械人就被摧毀了。x軍團有m個雷射**,其中第i個雷射**每秒可以削減乙個巨型機械人bi的裝甲值。雷射**的攻擊是連續的。這種雷射**非常奇怪,乙個雷射**只能攻擊一些特定的敵人。y軍團看到自己的巨型機械人被x軍團乙個乙個消滅,他們急需下達更多的指令。為了這個目標,y軍團需要知道x軍團最少需要用多長時間才能將y軍團的所有巨型機械人摧毀。但是他們不會計算這個問題,因此向你求助。
第一行,兩個整數,n、m。
第二行,n個整數,a1、a2…an。
第三行,m個整數,b1、b2…bm。
接下來的m行,每行n個整數,這些整數均為0或者1。這部分中的第i行的第j個整數為0表示第i個雷射**不可以攻擊第j個巨型機械人,為1表示第i個雷射**可以攻擊第j個巨型機械人。
對於30%的資料,1<=n, m<=5;
對於全部的資料,1<=n, m<=50,1<=ai<=105,1<=bi<=1000,輸入資料保證x軍團一定能摧毀y軍團的所有巨型機械人。
就是有m個機關槍,n個機器,每個機關槍每秒可以造成ai點傷害。
每個機器也有bi點體力值,問多少秒後可以把全部的機器乾掉。每個機關槍有指定的機器打。
秒數有可能為小數。
我們先來分析題目要求什麼?
其實就是要求每個機關槍打的最大值最小。
也就是二分。
現在我們考慮如何判定。
其實也很簡單,我們把這個問題轉換成網路流的問題。
從源點連到每個機關槍連容量為當前二分的mid*a[i]
然後每個機關槍向它們可以打的機器連maxlongint
機器再向匯點連bi。
最後只用判斷最大流是否為∑b
i 就行了。
#include
#include
#include
#include
#include
#include
#define maxlongint 2147483647
using
namespace
std;
const
int n=60,m=10000;
const
double eps=0.00001;
int n,m,ai[n],bi[n],b[m],las[m],nex[m],nu,t,x,ma,d[m],a[m];
double mid,f[m],re[m],sum;
void insert(int x,int y,int z)
bool bfs()}}
return d[t];
}double ditch(int x,double y)}}
if (ll1;
return ll;
}bool check(double x)
for(int i=1;i<=m;i++)
for(int i=1;i<=n;i++)insert(i+m,t,ai[i]);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
double l=0,r=sum/ma;
while(r-l>eps)
printf("%.6lf\n",l);
}
第1章 快速入門 2
1.3 關於注釋 注釋不會增加可執行程式的大小,編譯器會忽略所有的注釋。c 中有單行注釋和成對注釋兩種型別的注釋。單行注釋以雙斜線 開頭,行中處於雙斜線右邊的內容是注釋,被編譯器忽略。另一種界定符,注釋對 是從c語言繼承過來的。這種注釋以 開頭,以 結尾。編譯器把落入注釋對 之間的內容作為注釋。th...
第1次上機實驗 2
一 問題及 檔名稱 輸入3個整數,輸出其中的最大值 作 者 呂鵬 完成日期 2016 年 3 月 10 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 無 問題描述 我的第1次上機實驗 2 程式輸出 輸出其中的最大值 問題分析 略 演算法設計 略 includeusing names...
C 第2次實驗(1)
一.問題及 檔名稱 c 第2次實驗 1 作 者 楊昌程 完成日期 2016年 3 月 24 日 版 本 號 v1.0 對任務及求解方法的描述部分 判斷體重的健康情況 輸入描述 輸入體重和身高 問題描述 體重是否超重 程式輸出 超重,正常或超輕 問題分析 略 演算法設計 三.心得體會 能較快的編寫出程...