OpenJudge 2774 木材加工

1.链接:

http://bailian.openjudge.cn/practice/2774/

2.题目:

总Time Limit:
1000ms
Memory Limit:
65536kB
Description
木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目是给定了。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。

木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是正整数。

Input

第一行是两个正整数NK(1 ≤ N ≤ 10000, 1 ≤ K ≤ 10000),N是原木的数目,K是需要得到的小段的数目。
接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。
 

Output
输出能够切割得到的小段的最大长度。如果连1厘米长的小段都切不出来,输出"0"。
Sample Input
3 7
232
124
456
Sample Output
114
Source
NOIP 2004

3.思路:

利用二分查找减少计算的次数

4.代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4
 5 using namespace std;
 6
 7 int main()
 8 {
 9     //freopen("C://input.txt","r",stdin);
10
11     int i;
12
13     int n,k;
14     cin >> n >> k;
15
16     int sum; //sum of stick length
17
18     int *arr_len = new int[n];
19     memset(arr_len , 0, sizeof(int) * n);
20
21     sum = 0;
22     for(i = 0; i < n; ++i)
23     {
24         cin >> arr_len[i];
25         sum += arr_len[i];
26     }
27
28     int max_len = sum / k;
29     int min_len = 1;
30     int mid_len;
31
32     int count_k;
33     int max = 0;
34
35     while(min_len <= max_len)
36     {
37         mid_len = (max_len + min_len) / 2;
38
39         count_k = 0;
40         for(i = 0; i < n; ++i)
41         {
42             count_k += (arr_len[i] / mid_len);
43         }
44
45         if(count_k >= k)
46         {
47             if(max < mid_len) max = mid_len;
48             min_len = mid_len + 1;
49         }
50         else
51         {
52             max_len = mid_len - 1;
53         }
54     }
55
56     cout << max << endl;
57
58     delete [] arr_len;
59
60     return 0;
61 }

OpenJudge 2774 木材加工,布布扣,bubuko.com

时间: 2024-10-31 18:59:59

OpenJudge 2774 木材加工的相关文章

Openjudge NOI题库 ch0111/t1776 木材加工

总时间限制: 1000ms 内存限制: 65536kB 描述 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目是给定了.当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度. 木头长度的单位是厘米.原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是正整数. 输入 第一行是两个正整数N和K(1 ≤ N ≤ 10000, 1 ≤ K ≤ 10000),N是原木的数目,K是需要得到的小段的数目.接下来的N行,每行有一个1到1000

[OpenJudge] 百练2754 八皇后

八皇后 Description 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数.已经知道8皇后问题一共有92组解(即92个不同的皇后串).给出一个数b,要求输出第b个串.串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小. I

P2440 木材加工(二分答案)

P2440 木材加工 要保护环境 题目描述 题目描述: 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有 剩余),需要得到的小段的数目是给定的.当然,我们希望得到的小段木头越长越好,你的任务 是计算能够得到的小段木头的最大长度.木头长度的单位是cm.原木的长度都是正整数, 我们要求切割得到的小段木头的长度也是正整数. 例如有两根原木长度分别为11和21,要求切割成到等长的6段,很明显能切割出来的小段木头长度最长为5. 输入输出格式 输入格式: 输入: 第一行是两个正整

Poj OpenJudge 1068 Parencodings

1.Link: http://poj.org/problem?id=1068 http://bailian.openjudge.cn/practice/1068 2.Content: Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20077   Accepted: 12122 Description Let S = s1 s2...s2n be a well-formed string of p

字符串hash + 二分答案 - 求最长公共子串 --- poj 2774

Long Long Message Problem's Link:http://poj.org/problem?id=2774 Mean: 求两个字符串的最长公共子串的长度. analyse: 前面在学习后缀数组的时候已经做过一遍了,但是现在主攻字符串hash,再用字符串hash写一遍. 这题的思路是这样的: 1)取较短的串的长度作为high,然后二分答案(每次判断长度为mid=(low+high)>>1是否存在,如果存在就增加下界:不存在就缩小上界): 2)主要是对答案的判断(judge函数

OpenJudge 2721 忽略大小写比较字符串大小

1.Link: http://bailian.openjudge.cn/practice/2721/ 2.Content: 总时间限制: 1000ms 内存限制: 65536kB 描述 一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同 的字符或遇到'\0'为止.如果全部字符都相同,则认为相同:如果出现不相同的字符,则以第一个不相同的字符的比较结果为准.但在有些时候,我们比较字符 串的大小时,希望忽略字母的大小,例

POJ 2774 Long Long Message(后缀数组)

[题目链接] http://poj.org/problem?id=2774 [题目大意] 求最长公共子串 [题解] 将两个串中间嵌一个字符相连,求一遍后缀数组 如果排名相邻的两个后缀的开端是分属于两个串的, 那么他们的最长公共前缀就可以用来更新答案 [代码] #include <cstdio> #include <cstring> using namespace std; const int N=4000010; int n,rank[N],sa[N],h[N],tmp[N],cn

POJ 2774 Long Long Message (最长公共子串)

Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 27062   Accepted: 11010 Case Time Limit: 1000MS Description The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days

openjudge 大师兄,师傅被妖怪抓走啦

描述 孙悟空听到沙僧大喊一句:“大师兄,师傅被妖怪抓走啦!”于是孙悟空直追白骨精而去.孙悟空在一条长度为L的森林小路上飞奔,上面有L+1个整点,依次为0,1,2……L.白骨精会使用一种大范围的攻击法术,产生N个能量球,其中第i个能量球的能量值为f[i],落在小路的整点k[i]上.当孙悟空的位置离能量球i的距离为s时,会受到f[i]-s的伤害,如果f[i]-s计算出的伤害为负值,则判定为0.孙悟空虽然救师心切,但也不能葬身于白骨精的法术之中,因此他想知道应该躲在哪一个整点处,才能让自己受到的总伤害