Cod sursa(job #2857813)

Utilizator christalknightChristian Micea christalknight Data 26 februarie 2022 13:23:50
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

int verificare(int mid, int transport[]);

int n, k;

int main()
{
    int i, low = -1, high, solutie, mid;
    fin>>n>>k;
    int transport[n];
    for(i = high = 0; i < n; i++){
        cin>>transport[i];
        high += transport[i];
        if(transport[i] > low)
            low = transport[i];
        }
    if(k == 1)
        fout<<high;
    else{
        while(low < high - 1){
            mid = (high + low) / 2;
            if(verificare(mid, transport)){
                //cout<<"verificam, mid = "<<mid<<", high = "<<high<<", low = "<<low<<"\n";
                solutie = mid;
                high = mid;
                }
            else{
                //cout<<"mid = "<<mid<<", high = "<<high<<", low = "<<low<<"nu a mers\n";
                low = mid;
                }
            }
        fout<<solutie;
        }
}

int verificare(int mid, int transport[]){
    int i, j, sum;
    for(i = j = 0; i < k; i++){

        sum = 0;
        while(sum + transport[j] <= mid){
            sum += transport[j];
            j++;
            if(j >= n)
                return 1;
            }
        }
    return 0;
    }