Cod sursa(job #3319270)

Utilizator drg_.osGrosu Dragos drg_.os Data 31 octombrie 2025 14:49:45
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>

using namespace std;

const int NMAX = 16000;

int k, n, v[NMAX + 1];

bool valid(int c){
     int trans = 1, suma = 0;
     for (int i = 1; i <= n; i++){
          if (suma + v[i] <= c){
               suma = suma + v[i];
          }else{
               suma = v[i];
               trans++;

          }
     }
     if (trans <= k)
          return 1;
     return 0;
}

int cautare(int st, int dr){
     int mij, last = dr;
     while (st <= dr){
          mij = (st + dr) / 2;
          if (valid(mij)){
               last = mij;
               dr = mij - 1;
          }else{
               st = mij + 1;
          }
     }
     return last;
}

int main()
{
     ifstream fin("transport.in");
     ofstream fout("transport.out");
     int max = 0;
     int s = 0;
     fin >> n >> k;
     for (int i = 1; i <= n; i++){
          fin >> v[i];
          if (v[i] > max)
               max = v[i];
          s = s + v[i];
     }
     fout << cautare(max, s);


     return 0;
}