Cod sursa(job #1961742)

Utilizator whitewolf3131Ursu Laurentiu Cristian whitewolf3131 Data 11 aprilie 2017 12:15:21
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>

using namespace std;
int v[16005];
const int P=16000*16000;
int cautBin(int k, int n){
    int pas, sol=0;
    pas=P;
    int s=0;
    int d=0;
    bool ok;
    for(pas=1; pas<=P; pas<<=1);
    while(pas>0){
        ok=true;
        d=1;
        s=0;
        for(int i=0; i<n; i++){
            if(v[i]>sol+pas){
                ok=false;
            }
            if(s+v[i]<=pas+sol){
                s+=v[i];
            }
            else
            {

                s=v[i];
                d++;
            }
        }
        if(ok==false || d>k){
            sol+=pas;
        }
        pas>>=1;
    }
    return sol+1;
}
int main()
{
	FILE *in, *out;
	in = fopen("transport.in", "r");
	out = fopen("transport.out", "w");
	int n, k;
	fscanf(in, "%d%d", &n, &k);
	for(int i=0; i<n; i++){
        fscanf(in, "%d", &v[i]);
	}
	fprintf(out, "%d", cautBin(k, n));
	return 0;
}