码迷,mamicode.com
首页 > 其他好文 > 详细

网线切割

时间:2017-10-22 00:19:39      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:lag   切割   namespace   algorithm   stream   tps   etc   getc   har   

第二道。

原题链接:https://www.luogu.org/problem/show?pid=1297#sub

果然牵扯到浮点数题目就开始变得比较恶心人了啊。。

思路是有一步转化,先把米转换成厘米,转化成整数进行二分然后再转回来,这样好做一些。

和切木头那个题很像,也是要记录一个cnt,判断这个值和k的关系。

有一些细节部分需要好好处理。

参考代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #define maxn 10005
 5 #define maxl 1000000005
 6 using namespace std;
 7 int k,n,cnt;
 8 int a[maxn];
 9 double b,ans;
10 inline int read(){
11     int num = 0;
12     char c;
13     bool flag = false;
14     while ((c = getchar()) ==   || c == \n || c == \r);
15     if (c == -)
16         flag = true;
17     else
18         num = c - 0;
19     while (isdigit(c = getchar()))
20         num = num * 10 + c - 0;
21     return (flag ? -1 : 1) * num;
22 }
23 bool check(int x){
24     cnt=0;
25     for (int i=1;i<=n;i++)
26       cnt+=a[i]/x;
27     if (cnt>=k) 
28         return true;
29     else 
30         return false;
31 }
32 int main(){
33     n = read();k = read();
34     for (int i=1;i<=n;i++){
35       scanf("%lf",&b);
36       a[i] = b * 100;
37     }
38     int l = 0;
39     int r = maxl;
40     int mid;
41     while (l <= r){
42         mid=(l + r + 1) / 2;
43         if (l == r) 
44           break;
45         if (check(mid))
46             l = mid;
47         else 
48             r = mid - 1;
49     }
50     ans = mid * 1.00 / 100;
51     printf("%.2lf",ans);
52     return 0;
53 }

 

网线切割

标签:lag   切割   namespace   algorithm   stream   tps   etc   getc   har   

原文地址:http://www.cnblogs.com/OIerShawnZhou/p/7706752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!