Cod sursa(job #2622948)

Utilizator antonioganea3Antonio Ganea antonioganea3 Data 2 iunie 2020 12:24:29
Problema Transport Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <iostream>
using namespace std;

FILE * fin;

int computeTransports( int * v, int N, int C ){
    int load = 0;
    int transports = 0;
    for ( int i = 0; i < N; i++ ){
        load+=v[i];
        if ( load == C ){
            load = 0;
            transports++;
        } else if ( load > C ){
            load = v[i];
            transports++;
        }
    }
    if ( load > 0 ){
        transports++;
    }
    return transports;
}

FILE * fout;

int main(){
    int N, K;
    int v[16002];

    fin = fopen("transport.in","r");

    fscanf(fin,"%d%d",&N,&K);

    int max = 0;
    for ( int i = 0; i < N; i++ ){
        fscanf(fin,"%d",v+i);
        max += v[i];
    }


    int C = 0;
    for ( int i = 1; i <= max; i++ ){
        int res = computeTransports(v,N,i);
        //cout << res << " " << i << endl;
        if ( res <= K ){
            C = i;
            break;
        }
    }


    /*
    cout << endl;

    int C = max/2;
    int min = 0;
    int last = -1;
    while( true ){
        int res = computeTransports(v,N,C);
        //cout << res << " " << C << endl;

        if ( res < K ){
            C = (C+min)/2;
            min = C;
        } else if ( res > K ){
            C = (C+max)/2;
            max = C;
        }
        if ( last == C ){
            break;
        }
        last = C;
    }
*/
    //cout << "res " << C << endl;

    fout = fopen("transport.out","w");
    fprintf(fout,"%d",C);
    fclose(fout);


    fclose(fin);
    return 0;
}