有 n n n 臺(tái)設(shè)備和可在任何時(shí)刻為任意設(shè)備每秒充電 p p p 個(gè)單位的充電寶。求電量耗盡前使用時(shí)間最短的設(shè)備的最長使用時(shí)間。
對(duì)于 100 100 100%的數(shù)據(jù) 1 ≤ n ≤ 100000 1≤n≤100000 1≤n≤100000, 1 ≤ p ≤ 100000 1≤p≤100000 1≤p≤100000, 1 ≤ a i , b i ≤ 100000 1≤ai,bi≤100000 1≤ai,bi≤100000。
思路/分析:給設(shè)備
i
i
i 充電
k
k
k 秒(
k
k
k 不一定是整數(shù))其實(shí)就是在
b
[
i
]
b[i]
b[i] 的基礎(chǔ)上加上
k
p
kp
kp,所以充電的具體時(shí)間不會(huì)影響答案,我們只需保證:每個(gè)設(shè)備的原電量
b
[
i
]
+
b[i] +
b[i]+ 充電時(shí)間
k
k
k 充電速度
p
=
p =
p= 可用時(shí)間* 每個(gè)設(shè)備的耗電速度
a
[
i
]
a[i]
a[i] (最優(yōu))。
如果單位時(shí)間內(nèi)總消耗能量小于單位時(shí)間內(nèi)供應(yīng)能量,則無解。
#includeusing namespace std;
const int M = 100005;
int n;
double a[M],b[M],p;
bool check(double x){double sum = 0;
for(int i = 1;i<= n;i++){if(b[i]< x * a[i]){ sum += x * a[i] - b[i];
}
}
return sum<= p * x;
}
int main(){cin >>n >>p;
double asum = 0;
for(int i = 1;i<= n;i++){cin >>a[i] >>b[i];
asum += a[i];
}
if(asum<= p){cout<< -1<< endl;
return 0;
}
double l = 0,r = 1000000;
while(r - l >0.000001){double mid = (r + l) / 2;
if(check(mid)){ l = mid;
}
else r = mid;
}
cout<< l;
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧