Cod sursa(job #2089249)

Utilizator mitumitucristinaMitu Cristina mitumitucristina Data 16 decembrie 2017 11:55:42
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<iostream>
#include<stdio.h>
using namespace std;
int v[16001];
int main(){
  freopen("transport.in","r",stdin);
  freopen("transport.out","w",stdout);
  int n,k,st,s,dr,i,tk,mij,j,maxim=-1,sum=0;
  cin>>n>>k;
  for(i=1;i<=n;i++){
    cin>>v[i];
    if(v[i]>maxim)
      maxim=v[i];
      sum+=v[i];
}
  st=maxim;
  dr=sum;
  while(st<dr){
    mij=(st+dr)/2;
    tk=1;
    s=0;
    for(i=1;i<=n;i++){
      s+=v[i];
      if(s>mij){
        tk++;
        s=v[i];
      }

    }
    if(k==tk){
        break;
      }
      if(k<tk)
        st=mij+1;
      if(k>tk)
        dr=mij-1;

  }
  for(j=mij-1;j>=1;j--){
    s=0;
    tk=1;
    for(i=1;i<=n;i++){
        s+=v[i];
        if(s>j){
          tk++;
          s=v[i];
        }
    }
    if(k<tk){
      cout<<j+1;
      break;
    }

}
if(k>n)
  cout<<maxim;
  return 0;
}