POJ 1064 Cable master (二分)

题目链接: 传送门

Cable master

Time Limit: 1000MS     Memory Limit: 65536K

题目描述

有N条绳子,它们长度分别为Li。如果从它们中切割出K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留小数点后两位。

思路

二分搜索答案

#include<iostream>
#include<cstdio>
#include<cmath>
#define EPS 1e-6
const int INF = 100000;
using namespace std;
int N,K;
double ans[10005];

bool binary(double x)
{
	int sum = 0;
	for (int i = 0;i < N;i++)
	{
		sum += (int)(ans[i] / x);
	}
	return sum >= K;
}

int main()
{
	while (scanf("%d%d",&N,&K) != EOF)
	{
		for (int i = 0;i < N;i++)
		{
			scanf("%lf",&ans[i]);
		}
		
		double left = 0,right = INF,mid;
		
		while (right - left > EPS)
		{
			mid = (left + right)/2;
			if (binary(mid))
			{
				left = mid;
			}
			else
			{
				right = mid;
			}
		}
		
		/*if (mid < 1)
		{
			printf("0.00\n");
		}
		else
		{
			printf("%.2lf\n",mid);
		}*/
		
		printf("%.2f\n",floor(right*100)/100); //防止四舍五入 
	}
	
	return 0;
}
posted @   zxzhang  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航