Cod sursa(job #525677)

Utilizator nautilusCohal Alexandru nautilus Data 25 ianuarie 2011 20:38:02
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
#define dmax 16010
#define inf 999999999
using namespace std;

int n,k;
int a[dmax];
long long maxvol,sumavol;
long long sol=inf;

void citire()
{
 int i;
	
 ifstream fin("transport.in");
 
 fin>>n>>k;
 for (i=1; i<=n; i++)
	 {
	  fin>>a[i];
	  
	  if (a[i] > maxvol)
		  maxvol=a[i];
	  sumavol += a[i];
	 }
	
 fin.close();
}


int verificare(int c)
{
 int i,nr=1;
 long long tcurent=0;
	
 for (i=1; i<=n; i++)
	 if (tcurent + a[i] <= c)
		 tcurent += a[i]; else
		 {
		  tcurent = a[i];
		  nr++;
		  
		  if (nr > k)
			  break;
		 }

 if (nr <= k) 
	 {
	  if (c < sol)
		  sol=c;
	  return 1;
	 } else
	 return 0;
}


void cautare (long long st, long long dr)
{
 long long mijl=(st+dr)/2;
 
 if (st <= dr)
	 if (verificare(mijl))
		 cautare(st, mijl-1); else
		 cautare(mijl+1, dr);
}


void afisare()
{
 ofstream fout("transport.out");
 
 fout<<sol;
 
 fout.close();
}


int main()
{
	
 citire();
 cautare(maxvol, sumavol);
 afisare();
	
 return 0;
}