Cod sursa(job #1307777)

Utilizator diana-t95FMI Tudoreanu Diana Elena diana-t95 Data 2 ianuarie 2015 20:13:23
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include<fstream>
using namespace std;
#define maxn 16000
int N, K, A[maxn];
void citeste()
{
    ifstream f("transport.in");
    int i, x;
    f>>N>>K;
    for (i=1;i<=N;i++) {f>>x; A[i]=A[i-1]+x;}
}
int cautare_binara(int val, int pas, int x, int li)
{
    if (li>=N && pas<K) return 1;
    if (pas>=K) return 0;
    int st, dr, m; //caut binar val + x
    st=li; dr=N;
    while (st<=dr)
    {
        m=(st+dr)/2;
       if (A[m]>val+x) dr=m-1;
           else st=m+1;
    }
    //if (A[dr]>val+x) dr--;
    return cautare_binara(val, pas+1, x+A[dr], st+1);
}


int main()
{
    citeste();
    int l, r, m, minim=A[N]+1;
    l=A[1]; r=A[N];
    while(l<=r)
    {
        m=(l+r)/2;
        if (cautare_binara(m, 0, 0, 1)) { if (m<minim) minim=m; r=m-1; }
            else l=m+1;
    }
    ofstream g("transport.out");
    g<<minim<<'\n';

}