Cod sursa(job #3158162)

Utilizator eu_stiu_infoFerseta Matei eu_stiu_info Data 17 octombrie 2023 21:41:21
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>
#define MAX 16000

using namespace std;

int v[MAX+1];
int n, k;
long long S;

ifstream fin("transport.in");
ofstream fout("transport.out");

int numarare_sume(int s)
{
    int sum_loc=0;
    int nr=0;
    for(int i=1; i<=n; i++)
    {
        if(v[i]>s)return 0;
        sum_loc+=v[i];
        if(sum_loc>s)
        {
            nr++;
            sum_loc=v[i];
        }
    }
    if(nr==0)return 0;
    return nr+1;
}

long long caut_binar(int k)
{
    long long st=1;
    long long dr=S;
    int ans=S;
    while(st<=dr)
    {
        long long mij = (st+dr)/2;
        int nr_sume=numarare_sume(mij);
        cout << mij << ' '<<nr_sume << '\n';
        if(nr_sume<=k && nr_sume!=0)
        {
            dr=mij-1;
            ans=mij;
        }
        else st=mij+1;
    }
    return ans;
}

int main()
{
    fin >> n >> k;
    for(int i=1; i<=n; i++)
    {
        fin >> v[i];
        S+=v[i];
    }
    long long C = caut_binar(k);
    if(C!=-1)
        fout << C;
    else
        fout << -1;
    return 0;
}