Cod sursa(job #1250275)

Utilizator simaghitaSima Gheorghe Eugen simaghita Data 27 octombrie 2014 22:45:20
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,k,a[16010],suma,maxim;
void citire()
{
    ifstream fin("transport.in");
    fin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        fin>>a[i];
        suma+=a[i];
        maxim=max(maxim,a[i]);
    }
    fin.close();
}
int verif(int g)
{
    int i,c=0,tr=0;
    for(i=1;i<=n;i++)
    {
        c+=a[i];
        if(c+a[i+1] > g)
        {
            tr++;
            c=0;
        }
    }
    tr++;
    if(tr > k) return 0;
    else return 1;
}
int cautare(int st, int dr)
{
    int mij,rasp=0;
    while(st<=dr)
    {
        mij=(st+dr)>>1;
        //cout<<mij<<" ";
        if(verif(mij))
        {
            dr=mij-1;
            rasp=mij;
        }
        else st=mij+1;
    }
    return rasp;
}
void afisare()
{
    int min;
    min=cautare(maxim,suma);
    ofstream fout("transport.out");
    fout<<min<<"\n";
    fout.close();
}
int main()
{
    citire();
    afisare();
    return 0;
}