电子商务网站特点,vps空间如何做网站备份,网站开发支持二次开发,直通车推广计划方案原题链接#xff1a;小鸟的设备 - 洛谷
目录
1. 题目描述
2. 思路分析
3. 代码实现 1. 题目描述 2. 思路分析
浮点数二分答案。
首先特判#xff0c;如果接通设备每秒生成的能量p大于等于所有设备每秒消耗的能量#xff08;a[1]a[2]..a[n]#xff09;直接输出-1…原题链接小鸟的设备 - 洛谷
目录
1. 题目描述
2. 思路分析
3. 代码实现 1. 题目描述 2. 思路分析
浮点数二分答案。
首先特判如果接通设备每秒生成的能量p大于等于所有设备每秒消耗的能量a[1]a[2]..a[n]直接输出-1并且return 0; 结束程序。
之后进行浮点数二分。令l0,r1e10也就是对 时间 进行二分。写上浮点数二分的模板这个时候不用像整数二分那样对l,r进行1或者-1操作。自定义一个bool类型的check()函数令生成的总能量为powerp*x开一个sum变量并初始化为0。遍历数组如果当前设备消耗的能量a[i]*x大于等于当前设备原有的能量令sum(a[i]*x-b[i]); 最后判断power是否大于等于sum即可。
3. 代码实现
#includebits/stdc.h
using namespace std;
#define int long long
#define endl \n
const int N 1e5 10;
double n, p, a[N], b[N];bool check(double x) {double power p * x;double sum 0;for (int i 1; i n; i) {if (a[i] * x b[i]) sum a[i] * x - b[i];}return power sum;
}signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin n p;double sum 0;for (int i 1; i n; i) {cin a[i] b[i];sum a[i];}if (p sum) {cout -1 endl; return 0;}double l 0, r 1e10;while (r - l 1e-6) {double mid (l r) / 2.0;if (check(mid)) l mid;else r mid;}cout l endl;return 0;
}