题目链接:http://poj.org/problem?id=1064
题意:有n条绳子,长度为Li,现在从这n条绳子中切割出K条相等的绳子,问切割出来的这k条绳子的最大长度为多少;
二分判断即可;
但是本题的精度让人恶心;
#include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> #include<math.h> using namespace std; #define INF 0x3f3f3f3f #define N 100550 #define PI 4*atan(1.0) #define mod 10119 #define met(a, b) memset(a, b, sizeof(a)) typedef long long LL; int n, K; double a[N]; bool Judge(double Mid) { int sum = 0; for(int i=1; i<=n; i++) sum += (int)(a[i]/Mid); return sum>=K; } int main() { while(scanf("%d %d", &n, &K)!=EOF) { for(int i=1; i<=n; i++) scanf("%lf", &a[i]); sort(a+1, a+n+1); double L = 0, R = a[n], ans = a[n]; while(R-L > 1e-6) { double Mid = (L+R)/2; if(Judge(Mid)) L = Mid; else R = Mid; } printf("%.2f ", floor(R*100)/100);///L会错; } return 0; }