Cod sursa(job #1274833)

Utilizator Laura.miLaura Mitrache Laura.mi Data 24 noiembrie 2014 13:40:22
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");

int n,k;
int a2[16003];
int ret =-1;
int a,b;
void Citire()
{
    f>>n>>k;
    int i,x;
    for(i=1;i<=n;i++)
    {
        f>>x;
        a2[i]=x;
        if(x>a)a = x;
    }
}
bool Valid(int x)
{
    //returneaza:
    // 0, daca x > k
    // 1, daca x <= k
    int i;
    int contor=1;
    int suma=0;
    for(i=1;i<=n;i++)
    {
        if(suma+a2[i]<=x)
            suma+=a2[i];
        else
        {
            contor++;
            suma=a2[i];
        }
    }
    if(contor > k) return 0;
    return 1;

}

void Solve(int a, int b)
{
    if(a>b) return;
    int mij,t;

    mij = (a+b)/2;
    t = Valid(mij);

    if(t==0)
        Solve(mij+1,b);
    else
    {
        ret=mij;
        Solve(a,mij-1);
    }
}
int main()
{
    Citire();
    b = 16000*16000;
    Solve(a,b);
    g<<ret<<"\n";
    return 0;
}