Cod sursa(job #3316149)

Utilizator andrei_sevescusevescu andrei andrei_sevescu Data 17 octombrie 2025 15:22:14
Problema Transport Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <stdlib.h>

int v[16000];

int se_poate(int n,int k,int c){
    int i,s = 0,j = 0;
    for(i = 0;i < n;i++){
        if(v[i] > c)
            return 1;
        else if(s + v[i] <= c)
            s += v[i];
        else{
            s = v[i];
            j++;
        }
    }
    if(s > 0)
        j++;
    if(j > k)
        return 1;
    else
        return 0;
}

int main()
{
    FILE *fin, *fout;
    int n,i,st,k,dr,m,rez;
    fin=fopen("transport.in", "r");
    fout=fopen("transport.out", "w");
    fscanf(fin, "%d%d" ,&n,&k);
    for(i = 0;i < n;i++)
        fscanf(fin, "%d" ,&v[i]);
    st=1;
    dr=16000*16000;
    rez=-1;
    while(st <= dr){
        m = (st + dr) / 2;
        if(se_poate(n ,k ,m) == 1){
            st = m + 1;
        }else{
            dr = m - 1;
            rez = m;
        }
    }
    fprintf(fout, "%d" ,rez);
    fclose(fin);
    fclose(fout);
    return 0;
}