7Cable master
2016-04-09 15:33
183 查看
简单题意
给出每个管子的长度,让你确定最长切割长度,把管子按照切割长度切成给定的数量
解题思路形成过程
用二分法在能保证数量的基础上求得最大值
感想
说真的题干略长,读的不是很明白,跟着模糊理解,看了看输入输出数据,测试了一下自己的方法,成立,就这样做了,不过在选切割长度上限的时候一开始选了最短的的长度作为上线,在杭电题库试了一下WA,才想起来其实要是能保证数量的话,短的管子可以舍弃,于是就选了平均长度作为上限。
AC代码
#include<iostream>
#include<stdio.h>
#include<fstream>
using namespace std;
double a[10005];
int main()
{
//ifstream cin("in.txt");
freopen("in.txt","r",stdin);
int n,k;
double high,low,mid;
int cnt;
while(scanf("%d%d",&n,&k)&&(n||k)){
high=0;low=0;
for(int i=0;i<n;i++){
scanf("%lf",&a[i]);
high+=a[i];
}
high/=k;
while(high-low>1e-8){
cnt=0;
mid=(high+low)/2;
for(int i=0;i<n;i++){
cnt+=(int)(a[i]/mid);
}
if(cnt>=k)low=mid;
else high=mid;
}
printf("%.2lf\n",mid);
}
return 0;
}
给出每个管子的长度,让你确定最长切割长度,把管子按照切割长度切成给定的数量
解题思路形成过程
用二分法在能保证数量的基础上求得最大值
感想
说真的题干略长,读的不是很明白,跟着模糊理解,看了看输入输出数据,测试了一下自己的方法,成立,就这样做了,不过在选切割长度上限的时候一开始选了最短的的长度作为上线,在杭电题库试了一下WA,才想起来其实要是能保证数量的话,短的管子可以舍弃,于是就选了平均长度作为上限。
AC代码
#include<iostream>
#include<stdio.h>
#include<fstream>
using namespace std;
double a[10005];
int main()
{
//ifstream cin("in.txt");
freopen("in.txt","r",stdin);
int n,k;
double high,low,mid;
int cnt;
while(scanf("%d%d",&n,&k)&&(n||k)){
high=0;low=0;
for(int i=0;i<n;i++){
scanf("%lf",&a[i]);
high+=a[i];
}
high/=k;
while(high-low>1e-8){
cnt=0;
mid=(high+low)/2;
for(int i=0;i<n;i++){
cnt+=(int)(a[i]/mid);
}
if(cnt>=k)low=mid;
else high=mid;
}
printf("%.2lf\n",mid);
}
return 0;
}
相关文章推荐
- 3pie
- 2Strange fuction
- 1Can you solve this equation
- php 二分算法
- 8猜数字
- Line belt (三分查找)
- 二分查找汇总
- Java ,== ,equals的区别
- IEEE制定的浮点数表示法
- 《深入了解计算机系统》第七章读书笔记
- MySQL相关问题总结
- <jQuery>首页图片切换/轮播
- vsftpd.conf:vsftpd配置文件
- Android右滑销毁Activity
- Android 播放音频文件
- ::在C++中是什么意思
- 常用查找算法 总结
- 《使用MAT(Memory Analyzer Tool)工具分析dump文件》
- Newtonsoft.Json 版本冲突解决
- POI合并单元边框问题解决方法