Cod sursa(job #1837229)

Utilizator AlexandruLuchianov1Alex Luchianov AlexandruLuchianov1 Data 29 decembrie 2016 12:03:59
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in ("transport.in");
ofstream out ("transport.out");
int v[16001];
int n ,k;
bool transport(int capacity){
  int i = 0 ,s = 0,d = 1;
  while(i <= n){
    if(capacity < s + v[i] ){
     // cout<<"|";
      s = 0;
      //cout<":";
      d++;
      //cout<":";
      if(k < d){
        return 0;
      }
    }
    s += v[i];
   //cout<<s<<" "<<d<<'\n';
    i++;
  }
  //cout<<s<<" "<<d<<'\n';
  if(capacity < s){
      s = 0;
      d++;
      if(k < d){
        return 0;
      }
    }
  return 1;
}
int main()
{
    int maxs = 0 ,st,dr,mid;
    in>>n>>k;
    for(int i = 0 ; i < n ;i++){
      in>>v[i];
      if(maxs < v[i])
        maxs = v[i];
      //cout<<v[i]<<" ";
    }
   // cout<<transport(8)<<'\n';
   // cout<<transport(7)<<'\n';

    st = maxs;
    dr = 100000000;
    mid = (st + dr) /2;
    while(st<= dr){
      if(st == dr){
        out<<mid;
        return 0;
      }
      if(transport(mid)){
        dr = mid;
      } else{
        st = mid + 1;
      }
      mid = (st + dr) /2;
    }

    return 0;
}