Cod sursa(job #3206761)

Utilizator rosaaaRosa Elen S. rosaaa Data 23 februarie 2024 22:55:18
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
/**#include <iostream>
using namespace std;
//ifstream cin("transport.in");
//ofstream cout("transport.out");
int v[16005], n;

int e_bine(int x)
{
    int cnt= 0, suma= 0, i;
    for(i= 1;i <= n;i++)
    {
        if(suma+ v[i] > x)suma= v[i], cnt++;
        else suma+= v[i];
    }
    cnt++;
    return cnt;
}

int main()
{
    int i, k, mij, st, dr, rez= -1, suma= 0, ok, maxi= -1;
    cin >> n>> k;
    for(i= 1;i <= n;i++)cin >> v[i], suma+= v[i], maxi= max(maxi, v[i]);

    st= maxi; dr= suma;
    while(st <= dr)
    {
        mij= (st+ dr)/ 2;
        ok= e_bine(mij);
        //cout <<"mij= "<<mij<<" si ok= "<<ok<<endl;

        if(ok== k)rez= mij;
        if(ok < k)dr= mij- 1;
        else st= mij+ 1;

    }
    if(rez== -1)cout <<st;
    else cout << rez;



    return 0;
}*/

#include <fstream>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int v[16005], n;
int fa(int x)
{
    int i, suma= 0, cnt= 0;
    for(i= 1;i <= n;i++)
    {
        if(suma+ v[i] > x)cnt++, suma= v[i];//, cout <<i<<" ";
        else suma+= v[i];
    }
    cnt++;
    //cout <<"x= "<<x<<" si cnt= "<<cnt<<endl<<endl;
    return cnt;
}
int main()
{
    int i, k, maxi= -1, suma= 0, st, dr, mij, rez= -1;
    cin >> n>> k;
    for(i= 1;i <= n;i++)cin >> v[i], suma+= v[i], maxi= max(maxi, v[i]);
    st= maxi; dr= suma;
    while(st <= dr)
    {
        mij= (st+ dr)/ 2; /// capacitatea camionului
        int tran= fa(mij);
        if(tran== k)rez= mij;
        if(tran > k)st= mij+ 1;
        else dr= mij- 1;
    }
    if(rez > 0)cout << rez;
    else cout << st;

    return 0;
}