Pagini recente » Cod sursa (job #1506434) | Cod sursa (job #292430) | Cod sursa (job #1696243) | Cod sursa (job #112754) | Cod sursa (job #1522801)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
short n,k,v[16010];
int suma = 0;
short contor = 0;
int raspuns;
int verif(int mijl) {
int i = 0,s=0;
contor = 0;
while(i < n) {
s = 0;
while(s <= mijl) {
s += v[i];
i++;
}
s -= v[i-1];
i--;
contor++;
if(contor > k) {
return 0;
}
}
if(contor == k) {
return 1;
}
}
int cautare(int inceput, int sfarsit) {
int mijl = (inceput + sfarsit) / 2;
if(mijl == inceput || sfarsit <= inceput) {
return 0;
}
if(verif(mijl)) {
raspuns = mijl;
cautare(inceput,mijl);
}
else if(contor > k) {
cautare(mijl,sfarsit);
}
else {
cautare(inceput,mijl);
}
}
int main() {
f >> n >> k;
int max = 0;
for(int i = 0; i < n; i++) {
f >> v[i];
if(max < v[i]) {
max = v[i];
}
suma += v[i];
}
if(verif(max)) {
g << max;
}
else{
cautare(max,suma);
g << raspuns;
}
}