Cod sursa(job #3303833)

Utilizator AlfexAlex Florea Alfex Data 18 iulie 2025 11:41:22
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.61 kb
#include <bits/stdc++.h>

using namespace std;
vector<int>v;
    int n, k,s=0;
bool check(int nr)
{
    int sum=0,cnt=1;
    for(int i=1;i<=n;i++)
    {
        sum+=v[i];
        if(sum>nr)
        {
            sum=v[i];
            cnt++;
        }
    }
return cnt<=k;
}
int main()
{
    freopen("transport.in", "r",stdin);
    freopen("transport.out", "w", stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin>>n>>k;
    v=vector<int>(n+1);
    for(int i=1;i<=n;i++){
        cin>>v[i];
        s+=v[i];
    }
    int st=1, dr=s, mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(!check(mij))
        {
            st=mij+1;
        }
        else dr=mij-1;
    }
    cout<<1;
    return 0;
}

/*
#include <fstream>
#include <iostream>

using namespace std;

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

int nr_trasee(int v[16001], int n, long long val){
    int ct = 0, drumuri = 1;
    for(int i = 0; i < n; i++){
        ct += v[i];
        if(ct > val){
            ct = v[i];
            drumuri++;
        }
    }
    return drumuri;
}

int main(){

    int v[16001], n, k;
    long long sum = 0, maxim = 0;
    fin >> n >> k;

    for(int i = 0; i < n ; i++){
        fin >> v[i];
        sum += v[i];
        if(maxim < v[i])
            maxim = v[i];
    }


    long long st = maxim, dr = sum, mij, x;
    mij = (st+dr)/2;
    while(st <= dr){
        mij = (st+dr)/2;
        x = nr_trasee(v,n,mij);
        if(x > k){
            st = mij+1;
        }
        else{
            dr = mij-1;
        }
    }
    fout << st;
    fin.close();
    fout.close();
}

#include <fstream>
#include <iostream>

using namespace std;

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

int nr_trasee(int v[16001], int n, long long val){
    int ct = 0, drumuri = 1;
    for(int i = 0; i < n; i++){
        ct += v[i];
        if(ct > val){
            ct = v[i];
            drumuri++;
        }
    }
    return drumuri;
}

int main(){

    int v[16001], n, k;
    long long sum = 0, maxim = 0;
    fin >> n >> k;

    for(int i = 0; i < n ; i++){
        fin >> v[i];
        sum += v[i];
        if(maxim < v[i])
            maxim = v[i];
    }


    long long st = maxim, dr = sum, mij, x;
    mij = (st+dr)/2;
    while(st <= dr){
        mij = (st+dr)/2;
        x = nr_trasee(v,n,mij);
        if(x > k){
            st = mij+1;
        }
        else{
            dr = mij-1;
        }
    }
    fout << mij;
    fin.close();
    fout.close();
}
*/