Cod sursa(job #1259234)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 9 noiembrie 2014 20:50:49
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
long long n,k,i,a[16600],poz,mx;
long long trans(long long x){
    long long j = 1,nr=0,y;
    if(x < mx) return 0;
    while(j <= n){
        y = x;
        while(y >= a[j]){
            y -= a[j];
            j++;
        }
        nr++;
    }
    return nr;
}
long long caut(long long k)
{
    long long left = 1, right = 16005;
    long long mij;
    while(left <= right){
        mij = (left + right)/2;
        if(trans(mij) == k)
            return mij;
        else
        if(trans(mij) > k)
            left = mij + 1;
        else
        if(trans(mij) < k)
            right = mij - 1;
    }
    return 0;
}
int main()
{
    f >> n >> k;
    for(i = 1; i <= n; i++){
        f >> a[i];
        if(a[i] > mx) mx = a[i];
    }
    poz=caut(k);
    if(caut(k)<mx) g<< mx;
    else{
        while(trans(poz)==k){
            poz--;
        }
        g<<poz+1;
    }
    return 0;
}