1.练习项目 :
问题描述
给定 n 根木棒,第 i 根木棒的长度为 Li。每次你可以选择任意一根木棒并将其切成两段,切完后两段的长度都必须为整数。请问,如果一共切 m 次,在所有的方案中,切完后木棒中最长的一根最短是多少?
输入格式
输入的第一行包含两个整数 n,m,用一个空格分隔。第二行包含 n 个正整数 L1,L2,...,Ln,依次表示每根木棍的长度。
输出格式
输出一行包含一个整数表示答案。
2.选择课程
在蓝桥云课中选择题库,选择题号20136并开始练习。
3.开始练习
(1)源码 :
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+10;
ll aN;
int n,m;
bool check(int mid)
{
ll res=0;
for(int i=1;i<=n;i++){
res=res+ai/mid+(ai%mid==0?0:1)-1;
}
return res<=m;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>ai;
}
ll l=1,r=2e18;
while(l<=r){
ll mid=(l+r)/2;
if(check(mid))r=mid-1;
else l=mid+1;
}
cout<<l<<'\n';
return 0;
}
(2)检验结果
对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。
(3)练习心得:注意每段代码末尾的分号是否存在,如不存在则需即使补充;输入法 是否切换 为英语模式;语法是否错误。