Cod sursa(job #1045803)

Utilizator handz.FMI Andrei Tanasescu handz. Data 2 decembrie 2013 01:57:27
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("transport.in");
ofstream g("transport.out");

#define maxN 16001
int n,k,sP[maxN],Smin,Smax;

void ini()
{
    int i,x;
    f>>n; f>>k; Smax=0;
    for(i=1; i<=n ;i++)
    {
        f>>x; Smax+=x;
        sP[i]=Smax;
    }
    sP[0]=0; Smin=1;
}

int evaluate(int c)
{
    int i,t,rest,aux;
    t=0; rest=0;
    i=1;
    while(i<=n && t<k)
    {
        aux=sP[i]-sP[i-1];
        rest+=aux;
        if(rest==c)
        {
            t++; rest=0;
            i++;
        }
        else if(rest>c)
        {
            t++; rest=0;
        }
        else i++;
    }

    if(t<=k && i==n+1) return 1;
    else return 0;
}

int search_min(int p, int q)
{
    int mij,res;
    if(p==q)
    {
        return p;
    }
    else
    {
        cout<<"\n "<<p<<" si "<<q<<" nu sunt egale =>";
        mij=(p+q)/2;
        res=evaluate(mij);

        cout<<" pentru mij="<<mij<<" avem res="<<res;

        if(res) search_min(p,mij);
        else search_min(mij+1,q);
    }
}

int main()
{
    int valmin;
    ini();
    valmin=search_min(Smin,Smax); g<<valmin;
    return 0;
}