Cod sursa(job #1198252)

Utilizator cipri321Marin Ciprian cipri321 Data 15 iunie 2014 10:26:25
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#include <iostream>
using namespace std;
int n,i,X[16002],v,k,maxv,sv,rez;
int bs(int st, int dr)
{
    int m,i,nrd,svcrt;
    if (st==dr)
        return st;
    m=(st+dr)/2;
    // cu un camion de capacvitate m
    // se pot transporta saltelele in cel mult k drumuri?
    nrd=0;
    svcrt=0;
    for(i=1;i<=n+1;)
        if(X[i]+svcrt<=m)
        {
            svcrt+=X[i];
            i++;
        }
        else
        {
            nrd++;
            svcrt=0;
            if (i==n+1)
                break;
        }
    if (nrd<=k)
        return bs(st,m);
    else
        return bs(m+1,dr);
}
FILE *fi,*fo;
int main()
{
    fi = fopen("transport.in","r");
    fo = fopen("transport.out","w");
    fscanf(fi,"%d%d",&n,&k);
    maxv=0,sv=0;
    for(i=1;i<=n;i++)
    {
        fscanf(fi,"%d",&X[i]);
        if(X[i]>maxv)
            maxv=X[i];
        sv+=X[i];
    }
    X[n+1]=1000000000;
    rez=bs(maxv,sv);
    fprintf(fo,"%d",rez);

    fclose(fi);
    fclose(fo);
    return 0;
}