Cod sursa(job #1766485)

Utilizator DoubleNyNinicu Cristian DoubleNy Data 27 septembrie 2016 23:20:37
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;

int salt[16011], n, k, ans0;

int solve(int mid){
    int sum_at_i = 0;
    int first = 1;
    for(int i=1;i<=n;i++){
        if(sum_at_i + salt[i] > mid){
             sum_at_i = salt[i];
             first++;
        }
        else{
            sum_at_i += salt[i];
        }
    }
    return (first);
}

void FindBest(int low, int up,int k){
    while(low <= up){
        int mid = (up + low) / 2;
        int number = solve(mid);
        if(number <= k){
            ans0 = mid;
            up = mid - 1;
        } else
            low = mid + 1;
    }
}

int main(){
    ifstream fin("transport.in");
    ofstream fou("transport.out");
    ios_base::sync_with_stdio(0);
    int ans = 0;
    int sum = 0;
    fin >> n >> k;
    for(int i=1;i<=n;i++){
        fin >> salt[i];
        if(salt[i] > ans)
            ans = salt[i];
        sum = sum + salt[i];
    }
    int low = ans, up = sum;
    FindBest(low, up, k);
    fou << ans0;
}