博主洛谷粉丝团:https://www.luogu.com.cn/team/87178
P2440 木材加工
题目背景
要保护环境
题目描述
木材厂有 n n n 根原木,现在想把这些木头切割成 k k k 段长度均为 l l l 的小段木头(木头有可能有剩余)。
当然,我们希望得到的小段木头越长越好,请求出 l l l 的最大值。
木头长度的单位是 cm \text{cm} cm,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。
例如有两根原木长度分别为 11 11 11 和 21 21 21,要求切割成等长的 6 6 6 段,很明显能切割出来的小段木头长度最长为 5 5 5。
输入格式
第一行是两个正整数 n , k n,k n,k,分别表示原木的数量,需要得到的小段的数量。
接下来 n n n 行,每行一个正整数 L i L_i Li,表示一根原木的长度。
输出格式
仅一行,即 l l l 的最大值。
如果连
1cm
\text{1cm}
1cm 长的小段都切不出来,输出 0
。
样例 #1
样例输入 #1
3 7
232
124
456
样例输出 #1
114
提示
数据规模与约定
对于 100 % 100\% 100% 的数据,有 1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1≤n≤105, 1 ≤ k ≤ 1 0 8 1\le k\le 10^8 1≤k≤108, 1 ≤ L i ≤ 1 0 8 ( i ∈ [ 1 , n ] ) 1\le L_i\le 10^8(i\in[1,n]) 1≤Li≤108(i∈[1,n])。
看到这题博主马上就想到了
NOIP2017切割绳子
有 n 条绳子,每条绳子的长度已知且均为正整数。绳子可以以任意正整数长度切割,但不可以连接。现在要从这些绳子中切割出 mm 条长度相同的绳段,求绳段的最大长度是多少。
输入:第一行是一个不超过 100100 的正整数 nn,第二行是 nn 个不超过 106106 的正整数,表示每条绳子的长度,第三行是一个不超过 108108 的正整数 mm。
输出:绳段的最大长度,若无法切割,输出 Failed。
相似度几乎达到了90%
先把他
补充完整
#include<iostream>
using namespace std;
int n, m, i, lbound, ubound, mid, count;
int len[100]; // 绳子长度
int main()
{
cin >> n;
count = 0;
for (i = 0; i < n; i++)
{
cin >> len[i];
count += len[i];
}
cin >> m;
if (count < m)
{
cout << "Failed" << endl;
return 0;
}
lbound = 1;
ubound = 1000000;
while (lbound < ubound)
{
mid = (lbound + ubound +1) / 2;
count = 0;
for (i = 0; i < n; i++)
count += len[i]/mid;
if (count < m)
ubound = mid - 1;
else
lbound = mid;
}
cout << lbound << endl;
return 0;
}
先找到最明显的不同无解应该输出0
再根据输入的不同稍微改一下代码
修改代码
#include<iostream>
using namespace std;
long long n, m, i, lbound, ubound, mid, count,a=0;
long long len[100000];
int main() {
cin >> n>>m;
count = 0;
for (i = 0; i < n; i++) {
cin >> len[i];
a=max(a,len[i]);
count += len[i];
}
if (count< m) {
cout << "0" << endl;
return 0;
}
lbound = 1;
ubound = a;
while ( lbound <= ubound ) {
mid = (lbound + ubound +1) / 2 ;
count = 0;
for (i = 0; i < n; i++)
count += len[i]/mid ;
if (count < m)
ubound = mid - 1;
else if(count == m) lbound=mid+1;
else if(count > m) lbound=mid+1;
else
lbound = mid;
}
cout << lbound-1 << endl;
return 0;
}
测试
博主先帮你们测试一下
直接AC了
大家看懂了请点赞,不懂欢迎私信哦
请大家支持一下博主哦!
大家点个赞再走