今天 继续二分啊 啊啊啊啊 二分真是一个博大精深的算法
在被那个质检员卡了好久之后 我决定做一些 比较水 的 二分答案
(1)luogu2440 木材加工
这题的意思就是给你一些木材的长度 要你切成一样的长度 给你要切成的段数 求最小段 的最大长度 (最小 最大 没错 就是二分 哈哈哈哈哈)
这是一道很水很水的二分答案题 代码一看就懂 但是 有一个很坑很坑的地方 当 切不出来 的时候 除数为0 在判断的时候 会 RE 这个要额外的判断一下 !!!!!
代码附下:
#include<bits/stdc++.h>
using namespace std;
int n,k;
int a[100010];
bool xdy(int x)
{
if (x==0) {cout<<0;exit(0);}//判断当除数为0时 直接输出0 跳出
int s=0;
for (int i=1;i<=n;i++) s+=a[i]/x;//累加能切成的段数
return(s>=k);//将累加的段数与规定的段数进行比较
}
int lzy()//二分木材长度
{
int l=0,r=100000000,mid;
while (l+1<r)
{
mid=(l+r)/2;
if(xdy(mid)) l=mid;
else r=mid;
}
if (xdy(l)) return l;
else return r;
}
int main()
{
cin>>n>>k;
for (int i=1;i<=n;i++) cin>>a[i];
if (lzy()<1) cout<<0;
else cout<<lzy();
return 0;
}
质检员真的看不懂啊啊啊啊啊啊啊啊啊
(2) luogu1824 进击的奶牛
这题目和 昨天的 挑石头差不多 不多说
代码如下: