2 条题解

  • 0
    @ 2024-1-11 22:12:19

    //步骤一:头文件,这题主要是二分 int n,k,a[100005],l,r,mid,ans,maxx;

    bool check(int x){ //步骤四:通过循环遍历数组里的每一个元素并计算出总共有的木段数,判断这个点合不合法 }

    //步骤二:输入,给二分右边界一个适合的值

    while(l<=r)//步骤三:二分初始化,调用函数判断,因为这道题求最长,所以值越大越好,希望更新左端点 cout<<ans; }

    • 0
      @ 2024-1-10 17:37:05
      #include <bits/stdc++.h>
      #define ll long long
      using namespace std;
      const int N=100005;
      int n,m,k,s,t,a[N];
      int check(int x){
      	ll ans=0;
      	for (int i=1;i<=n;++i) ans+=a[i]/x;
      	return ans>=k;
      }
      int main()
      {
      	cin>>n>>k;
      	for (int i=1;i<=n;++i) cin>>a[i];
      	int l=1,r=100000000;
      	while (l<=r){
      		int mid=(l+r)/2;
      		if (check(mid)) l=mid+1;
      		else r=mid-1;
      	}
      	cout<<r;
      }
      
      • 1

      信息

      ID
      650
      时间
      1000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      221
      已通过
      76
      上传者