Cod sursa(job #132138)

Utilizator gigi_becaliGigi Becali gigi_becali Data 5 februarie 2008 10:44:21
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
                                                                     
                                                                     
                                                                     
                                             
/*Caut binar rezultatul pe intervalul [max,s], unde max-maximul din sir, iar s-suma elementelor.*/

#include<stdio.h>
FILE*f=fopen("transport.in","r");
FILE*g=fopen("transport.out","w");
int n,s,k,max, a[16003];
void read()
  {
  fscanf(f,"%d %d",&n,&k);
  for(int i=1;i<=n;++i)
   {
   fscanf(f,"%d",a+i);
   s+=a[i];
   if(a[i]>max) max=a[i];
   }
  }
int ok(int x)
  {
  int i=1,j=0,s;
  while(i<=n)
    {
    s=0;
    while(s<x && i<=n) { s+=a[i]; ++i; }
    if(s>x) --i;
    ++j;
    if(j>k) return 0;
    }
  return 1;
  }
int binary_search(int i, int j)
  {
  int m;
  while(i<=j)
    {
    m=(i+j)/2;
    if(ok(m))
          {
          if(!(ok(m-1))) return m;
          else j=m-1;
          }

    else i=m+1;
    }
  return 0;
  }
int main()
  {
  read();
  int sol;
  sol=binary_search(max,s);
  fprintf(g,"%d\n",sol);
  return 0;
  }