Pagini recente » Cod sursa (job #420282) | Cod sursa (job #2524092) | Cod sursa (job #3186785) | Cod sursa (job #945243) | Cod sursa (job #1522611)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in ("transport.in");
ofstream out ("transport.out");
int N,K;
int V[16000];
int M;
int MAX;
int Verificat(int j)
{
if (j<MAX)
return 0;
int cont=0,cant=0;
for (int i=0;i<N;i++)
{
cant+=V[i];
if (cant>j)
cant=0,cont++,i--;
else if (cant==j)
cant=0,cont++;
}
if (cont>K)return 0;
else return 1;
}
int caut_bin (int st, int dr)
{
cout<<st<<' '<<dr<<' '<<M<<'\n';
if (dr<=st+1)
{
if (Verificat(dr))
return dr;
return st;
}
int mid=(st+dr)/2;
if (Verificat(mid))
return caut_bin(st, mid);
return caut_bin(mid,dr);
}
void Read()
{
in>>N>>K;
for (int i=0;i<N;i++)
{
in>>V[i];
}
}
void Solve()
{
M=-2000000;
for (int i=0;i<N;i++)
{
if (M<V[i])
M=V[i],MAX=V[i];
}
cout<<M<<'\n';
M=caut_bin(M,N*M);
}
void Write()
{
out<<M;
}
int main()
{
Read();
Solve();
Write();
return 0;
}