Cod sursa(job #64728)

Utilizator info_arrandrei gigea info_arr Data 5 iunie 2007 08:30:40
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
using namespace std;

#define MAX_N 16005
#include <stdio.h>

FILE *fin=fopen("transport.in","r"),
     *fout=fopen("transport.out","w");

int a[MAX_N];
int n,k;

int check( int val )
{
 int i=1,ct=0,c=0;
 while (i<=n)
  {
   while (c+a[i]<=val)
    {
     c+=a[i]; i++;
     if (i>n) break;
    }
   ct++;
   if (a[i]>val) break;
   if (i==n+1) break;
   c=0;
  }
 if (ct<=k && i>n) return 1;
 return 0;
}

void solve(void)
{
  int mj,li=1,lf=0,i;
  for (i=1; i<=n; i++) lf+=a[i];
  while (li<=lf)
   {
    mj=(li+lf)/2;
    if (check(mj)) lf=mj-1;
     else li=mj+1;
   }
  fprintf(fout,"%d\n",mj);
}

int main()
{
  fscanf(fin,"%d %d",&n,&k);
  for (int i=1; i<=n; i++)
   fscanf(fin,"%d\n",a+i);
  solve();
  fclose(fin);
  fclose(fout);

  return 0;
}