Cod sursa(job #2276061)

Utilizator BovisioNitica Ionut Bogdan Bovisio Data 4 noiembrie 2018 00:56:16
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>

using namespace std;

int Sol(int v[],int n,int k,int point)
{
    int trans = 1,cap = point;
    for(int i=0;i<n;i++)
    {
        if(v[i] > cap)
        {
            cap = point;
            trans++;
        }
        cap -= v[i];
    }
    return trans;
}

int BinarySearch(int Left,int Right,int v[],int n,int k)
{
    int m;
    while(Left <= Right)
    {
        m = (Left + Right)/2;
        if(Sol(v,n,k,m) <= k)
            Right = m-1;
        else
            Left = m+1;
    }
    return Left;
}

int main()
{
    int n,k,suma=0,maxim=-1,v[16001];
    FILE * f =fopen("transport.in","r");
    fscanf(f,"%i %i",&n,&k);
    for(int i=0;i<n;i++)
    {
        fscanf(f,"%i",&v[i]);
        suma += v[i];
        if(v[i] > maxim)
            maxim = v[i];
    }
    fclose(f);
    FILE * g = fopen("transport.out","w");
    fprintf(g,"%i",BinarySearch(maxim,suma,v,n,k));
    return 0;
}