zoukankan      html  css  js  c++  java
  • 愤怒的牛&数列分段II

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn=1e5+7;
     6 int n,m;
     7 int l,r,mid;
     8 int xx[maxn];
     9 bool check(int u){
    10     int cnt=1;int lft=xx[1]+u;
    11     for(int i=2;i<=n;i++){
    12         if(lft<=xx[i]) {cnt++;lft=xx[i]+u;}
    13     }
    14     return cnt>=m;
    15 }
    16 int main(){
    17     cin>>n>>m;
    18     for(int i=1;i<=n;i++) cin>>xx[i];
    19     sort(xx+1,xx+n+1);
    20     l=0;r=xx[n]-xx[1];
    21     while(l<=r){
    22         mid=(l+r)/2;
    23         if(check(mid)) l=mid+1;
    24         else r=mid-1; 
    25     }
    26     cout<<r<<endl;
    27     return 0;
    28 }

    如果不是l=mid+1,r=mid-1的话,因为这里都是整数,很可能出现l=mid的情况,这是就会无限循环下去

    数列分段II

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 typedef long long ll;
     5 const ll maxn=1e6+7;
     6 ll n,m,l,r,mid;
     7 ll a[maxn];
     8 bool check(ll x){
     9     ll cnt=1;ll lft=a[1];
    10     for(ll i=2;i<=n;i++){
    11         if(lft+a[i]>x){cnt++;lft=a[i];}
    12         else{lft+=a[i];}
    13     }
    14     return cnt<=m;
    15 }
    16 int main(){
    17     cin>>n>>m;
    18     for(ll i=1;i<=n;i++) {cin>>a[i];r+=a[i];l=max(l,a[i]);}
    19     while(l<=r){
    20         mid=(l+r)/2;
    21         if(check(mid)) r=mid-1;
    22         else l=mid+1;
    23     }
    24     cout<<l<<endl;
    25     return 0;
    26 }

    l不能设成0

  • 相关阅读:
    strstr 函数的实现
    函数模板与模板函数
    内核态和用户态
    最短路径算法(跟新SPFA,Ford)
    P1042 乒乓球
    P2347 砝码称重
    P1087 FBI树
    P1540 机器翻译
    P1028 数的计算
    P1067 多项式输出
  • 原文地址:https://www.cnblogs.com/lcan/p/9612425.html
Copyright © 2011-2022 走看看