Mai intai trebuie sa te autentifici.
Cod sursa(job #2611870)
| Utilizator | Data | 7 mai 2020 19:17:03 | |
|---|---|---|---|
| Problema | Transport | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.08 kb |
#include<cstdio>
#define MAX_N 16000
#define oo 0x3f3f3f3f
using namespace std;
int v[MAX_N+1], n, k, sum, maxV, ans;
void read() {
FILE* fin = fopen("transport.in","r");
fscanf(fin,"%d%d",&n,&k);
maxV = -1;
for(int i = 0; i < n; i++) {
fscanf(fin,"%d",&v[i]);
if(v[i] > maxV)
maxV = v[i];
sum += v[i];
}
v[n] = oo;
fclose(fin);
}
bool sePoate(int vmax) {
int i, s, nrt;
i = s = nrt = 0;
while(i <= n && nrt <= k) {
if(s + v[i] <= vmax)
s += v[i];
else {
s = v[i];
nrt++;
}
i++;
}
if(nrt <= k) return true;
return false;
}
void binarySearch(int Begin, int End) {
int b = Begin, e = End, mid;
while(b <= e) {
mid = (b + e) >> 1;
if(sePoate(mid)) {
ans = mid;
e = mid - 1;
} else b = mid + 1;
}
}
void write() {
FILE* fout = fopen("transport.out","w");
fprintf(fout,"%d\n",ans);
fclose(fout);
}
int main() {
read();
binarySearch(maxV,sum);
write();
return 0;
}
