Cod sursa(job #1766428)

Utilizator DoubleNyNinicu Cristian DoubleNy Data 27 septembrie 2016 22:14:02
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <bits/stdc++.h>
using namespace std;

int a,b,globalMinus = 0;
int salt[16001],sum[16001],sett[16001];

int findBest(int low, int up,int ans){

        while (low <= up)
        {
            int mid = low + (up-low)/2;

            if (sum[mid] - globalMinus == ans)
                return mid;

            if (sum[mid] - globalMinus < ans)
                low = mid + 1;

            else
                up = mid - 1;
        }
    return up;
}

int main(){

    //ifstream fin("input.in");
        ifstream fin("transport.in");
        ofstream fin("transport.out");
    ios_base::sync_with_stdio(0);
    //cin.tie(0);
    int n,k,ans = -1;
    fin >> n >> k;
    memset(sum,0,sizeof(sum));
    for(int i=1;i<=n;i++){
        fin >> salt[i];
        sum[0] += salt[i];
        sum[i] = sum[0];
        if(salt[i] > ans)
            ans = salt[i];
    }
    int copyOfK  = k;
    int low = 1,up = n;
    //cout << k << endl << endl;
    //cout << ans<< endl;
    while( k > 0 ){
        a = low;
        //ans = 7;
        b = findBest(low, up, ans);
        low = b + 1;
        globalMinus = sum[b];
        k--;
        if(k == 0 && low <= up){
            k = copyOfK;
            low = 1;
            up = n;
            ans++;
            globalMinus = 0;
        }
      //  cout << ans << endl;

        //cout << a << ' ' << b << endl;
    }
    fou << ans;
    /*for(int i=1;i<=n;i++){
        cout << salt[i] << ' ';
    }
    cout << endl;
    for(int i=1;i<=n;i++){
        cout << sum[i] << ' ';
    }*/
    //cout << endl;
}