0908-C07二分答案
2024-09-08 17:53:07
发布于:江苏
12阅读
0回复
0点赞
1. 二分左边界
2. 二分右边界
3. 砍树
#include<bits/stdc++.h>
using namespace std;
int n,m,mid;
int maxn;
int a[1000005]={};
bool check(int height)
{
long long sum=0;
for(int i=1;i<=n;i++)
{
if(a[i]<=height)
continue;
else
sum+=a[i]-height;
}
return sum >= m;
}
int binary_search_right(int l,int r)
{
while(l<r)
{
mid=l+r+1>>1;
if(check(mid))
l=mid;
else
r=mid-1;
}
return l;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>=maxn)
maxn=a[i];
}
int l=0,r=maxn;
cout<<binary_search_right(l,r);
return 0;
}
4. 跳石头
5.数列分段
#include<bits/stdc++.h>
using namespace std;
int n,m,mid;
int maxn;
int a[1000005]={};
bool check(int height)
{
long long sum=0;
for(int i=1;i<=n;i++)
{
if(a[i]<=height)
continue;
else
sum+=a[i]-height;
}
return sum >= m;
}
int binary_search_right(int l,int r)
{
while(l<r)
{
mid=l+r+1>>1;
if(check(mid))
l=mid;
else
r=mid-1;
}
return l;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>=maxn)
maxn=a[i];
}
int l=0,r=maxn;
cout<<binary_search_right(l,r);
return 0;
}
6. 补充
全部评论 1
顶!
2024-09-08 来自 浙江
0
有帮助,赞一个