Pagini recente » Cod sursa (job #2107637) | Cod sursa (job #1074090) | Cod sursa (job #1556503) | Cod sursa (job #304175) | Cod sursa (job #1019982)
//
// main.cpp
// transport
//
// Created by Catalina Brinza on 10/31/13.
// Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <iostream>
#include <fstream>
using namespace std;
int n,k;
long s[16001];
bool a[256000000];
long ma;
ifstream f("transport.in");
ofstream g("transport.out");
long cautare(long x)
{long h, pos=1<<28;
for (h=0;pos!=0;pos=pos/2)
if (h+pos<=n && s[h+pos]<x) h+=pos;
if (s[h+1]==x) return h+1;
else if (s[h]<x) return h;
else return h-1;
}
bool fun(long m)
{
long j;
int ka=k;
long cop=m;
for(ka=1;ka<=k;ka++)
{
j=cautare(m);
if (j==n) break;
else m=s[j]+cop;
}
if (j==n) return true;
else return false;
}
int main()
{long x,i,m;
char *a;
f>>n>>k;
s[0]=0;
for (i=1;i<=n;i++){ f>>x;s[i]=s[i-1]+x;
if (x>ma) ma=x;}
long min=ma;
ma=s[n];
a=(char*)malloc(ma*sizeof(char));
for (i=min;i<=ma;i++) a[i]=-1;
bool ok=false;
while (!ok)
{
m=min+(ma-min)/2;
ok=fun(m);
if (ok){ ma=m-1;
a[m]=1;}
else { min=m+1;;
a[m]=0;}
if (!((ok && a[m-1]==0) || (!ok && a[m+1]==1))) ok=false;
}
if (a[m]==0) g<<m+1;
else g<<m;
f.close();
g.close();
return 0;
}