Nu aveti permisiuni pentru a descarca fisierul grader_test1.in
Cod sursa(job #1817878)
| Utilizator | Data | 28 noiembrie 2016 16:57:08 | |
|---|---|---|---|
| Problema | Transport | Scor | 80 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.87 kb |
#include <cstdio>
const int MAX_N = 16000;
const int INFINIT = 256000000;
int v[MAX_N];
bool transport(int n, int cap, int k) {
int x, tr;
tr = 1;
x = 0;
for(int i = 0; i < n; ++i) {
x = x + v[i];
if(x > cap) {
tr++;
x = v[i];
}
}
if(tr <= k)
return true;
return false;
}
int cautare(int st, int dr, int k, int n) {
int mid;
bool ok;
while(dr - st > 1) {
mid = (st + dr) / 2;
ok = transport(n, mid, k);
if(!ok)
st = mid;
else
dr = mid;
}
return dr;
}
int main() {
int n, k, max;
FILE *fin = fopen("transport.in", "r");
fscanf(fin, "%d%d", &n, &k);
max = 0;
for(int i = 0; i < n; ++i) {
fscanf(fin, "%d", &v[i]);
if(v[i] > max)
max = v[i];
}
fclose(fin);
FILE *fout = fopen("transport.out", "w");
fprintf(fout, "%d", cautare(max, INFINIT, k, n));
fclose(fout);
return 0;
}
