Cod sursa(job #1806137)

Utilizator mihai.alphamihai craciun mihai.alpha Data 14 noiembrie 2016 20:56:13
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
#include <algorithm>
#include <ctype.h>
FILE *fin, *fout;
#define BUF 4096
int pos = BUF;
char buf[BUF];
inline char next()  {
    if(pos == BUF) fread(buf, 1, BUF, fin), pos = 0;
    return buf[pos++];
}

inline void read(int &x)  {
    char ch;
    x = 0;
    ch = next();
    while(!isdigit(ch)) ch = next();
    while(isdigit(ch))  {
        x = x * 10 + ch - '0';
        ch = next();
    }
    return;
}
#define max(a, b) (a > b ? a : b)
int n, k, maxim;
int v[16000];

int main()  {
    fin = fopen("transport.in", "r");
    fout = fopen("transport.out", "w");
    read(n);
    read(k);
    int st, dr, mijloc;
    int i;
    int x = 0;
    for(i = 0;i < n;i++)  {
        read(v[i]);
        maxim = max(maxim, v[i]);
        x += v[i];
    }
    int s = 0, cc = 1;
   st = maxim;
    dr = x;
   while(st <= dr)  {
    mijloc = (st+dr)/2;
    for(i = 0;i < n;i++)  {
        s=s+v[i];
        if(s > mijloc)  {
            cc++;
            s = v[i];
        }
    }
    if(cc > k)  {
            st = mijloc + 1;
            cc = 1;
            s = 0;
        }
        else  {
            dr = mijloc - 1;
            cc = 1;
            s = 0;
        }
   }
   fprintf(fout, "%d", st);
   fclose(fin);
   fclose(fout);
   return 0;
}