Cod sursa(job #48038)

Utilizator alecmanAchim Ioan Alexandru alecman Data 4 aprilie 2007 12:54:51
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
/*
 *
 *
  infoarena 2.0 - Arhiva - Transport
 *
 *
 */

#include<stdio.h>

#define INPUT "transport.in"
#define OUTPUT "transport.out"

FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");

int n,k,a[16001],max;
long s;

void citire();
void cautare();

int main()
{
  citire();
  cautare();
  fclose(fin);
  fclose(fout);
  return 0;
}

void citire()
{
  fscanf(fin, "%d %d", &n, &k);
  max=-1;
  s=0;
  for(int i=1;i<=n;++i)
  {
    fscanf(fin, "%d", &a[i]);
    if(a[i]>max)
      max=a[i];
    s+=a[i];
  }
}

void cautare()
{
  long pozmin,pozmax,pozmij,contor,suma;
  pozmin=max;
  pozmax=s;
  pozmij=(pozmax+pozmin)/2;
  while(pozmij!=pozmin&&pozmij!=pozmax)
  {
    contor=0;
    suma=0;
    for(int i=1;i<=n;++i)
    {
      if(suma+a[i]<=pozmij)
        suma+=a[i];
      else
      {
        ++contor;
        suma=a[i];
      }
    }
    if(s!=0)
    ++contor;
    if(contor<=k)
    {
      pozmax=pozmij;
      pozmij=(pozmin+pozmax)/2;
    }
    else
    {
      pozmin=pozmij;
      pozmij=(pozmin+pozmax)/2;
    }
  }
  fprintf(fout, "%ld\n", pozmax);
}