poj 1064

mac2024-05-15  27

二分搜索 注意题目是的一句话

The number must be written with a centimeter precision, with exactly two digits after a decimal point.

必须精确到小数点后两位,而不是四舍五入到小数点后两位, printf("%.2f\n")默认是四舍五入

#include <iostream> #include <cstdio> #include <iomanip> #include <string> #include <cstdlib> #include <cstring> #include <queue> #include <set> #include <vector> #include <map> #include <algorithm> #include <cmath> #include <stack> #include <stdlib.h> #include <stdio.h> #define INF 0x3f3f3f3f #define LINF 0x3f3f3f3f3f3f3f3f #define ll long long #define ull unsigned long long #define uint unsigned int #define l(x) x<<1 #define r(x) x<<1|1 #define ms(a,b) memset(a,b,sizeof(a)) using namespace std; int n, k; double demo[11111]; double l, r,mid; bool is(double x) { int sum = 0; for (int i = 0; i < n; i++) { sum += (int)(demo[i] / x); } return sum>=k; } int main() { scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) { scanf("%lf", &demo[i]); } l = 0; r = INF; for (int i = 0; i < 100; i++) { mid = (l + r) / 2; if (is(mid)) l = mid; else r = mid; } printf("%.2f\n",(int(l * 100))/ 100.0); return 0; }
最新回复(0)