Cod sursa(job #1180041)

Utilizator andreey_047Andrei Maxim andreey_047 Data 29 aprilie 2014 20:40:54
Problema Transport Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>
#define Nmax 16009
using namespace std;
int n,k,v[Nmax],big;
int Check(long long C){
   int i=1,num=1,sum=0;
   while(v[i] <= C && i <= n){
    if(sum+v[i] > C) {sum=v[i];num++;}
    else sum+=v[i];
    i++;
   }
   if(i!=n+1) num =-1;
  return num;
}
void solve(){
  int st=big,x;
  long long dr=big*big,j=0,mid;
  while(st<=dr){
    mid = (st+dr)/2;
    x = Check(mid);
    if(x==-1) st=mid+1;
    else{
     if(x < k)
        dr=mid-1;
     else if(x > k)
        st=mid+1;
     else {dr=mid-1;j=mid;}}
}
    printf("%d\n",j);
}
int main(){
    int i;
     freopen("transport.in","r",stdin);
     freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++) {scanf("%d",&v[i]);if(v[i]>big) big=v[i];}    solve();
    return 0;
}