首页 > 其他分享 >切绳子

切绳子

时间:2022-08-22 21:47:37浏览次数:60  
标签:二分 int double 绳子 mid 就行了 check

直接二分答案,区间的l取0、r取长度和,然后check时对每条长度除以二分的值向下取整,判断是否不小于k就行了。
基本是转换成整型进行二分,这里直接对实型进行二分,然后输出时稍微处理就行了。
#include<bits/stdc++.h> using namespace std; int n,k; double a[10005],l,r,mid; char s[100]; inline bool check(double x) { int tot=0; for(int i=1;i<=n;i++)tot+=floor(a[i]/x); return tot>=k; } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++)scanf("%lf",&a[i]),r+=a[i]; while(r-l>1e-4) { mid=(l+r)/2; if(check(mid))l=mid; else r=mid; } sprintf(s+1,"%.3f",l); s[strlen(s+1)]='\0'; printf("%s",s+1); return 0; }

标签:二分,int,double,绳子,mid,就行了,check
From: https://www.cnblogs.com/wangjunlong9948/p/16614339.html

相关文章

  • 切绳子
    还是按照二分答案的模板写,因为是double类型的,会有精度错误,所以可以先将它们都乘100弄成整数,最后输出时再/100 ......