Cod sursa(job #2699092)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 23 ianuarie 2021 17:38:25
Problema Carnati Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#include <stdlib.h>
#define PMAX 1000000

int o[2000],p[2000],f[PMAX + 1];

void sort(int begin, int end){
  int b=begin, e=end, aux, pivot=o[(begin+end)/2];

  while(o[b]<pivot)
    b++;
  while(o[e]>pivot)
    e--;

  while(b<e){
    aux=o[b];
    o[b]=o[e];
    o[e]=aux;

    aux=p[b];
    p[b]=p[e];
    p[e]=aux;

    do{
      b++;
    } while(o[b]<pivot);
    do{
      e--;
    } while(o[e]>pivot);
  }

  if(e>begin)
    sort(begin,e);
  if(e+1<end)
    sort(e+1,end);
}
int main(){
  int n,i,j,c,max,s;
  FILE *fin, *fout;

  fin=fopen("carnati.in","r");
  fscanf(fin,"%d%d",&n,&c);
  for(i=0;i<n;i++){
    fscanf(fin,"%d%d",&o[i],&p[i]);
    f[p[i]]++;
  }
  sort(0,n-1);
  fclose(fin);

  max=0;
  for(i=0;i<PMAX;i++){ ///Ciclam prin toate preturile posibile
    if(f[i]>0){
      s=0;
      if(p[0]>=i)
        s+=i;
      if(s>max)
        max=s;
      for(j=1;j<n;j++){
        s-=c*(o[j]-o[j-1]); ///Scadem intretinerea vanzatorului
        ///Daca sirul de pana acum a fost profitabli (profitul e pozitiv) mai adaugam la sirul precedent
        ///Daca nu, pornim un nou sir si resetam s-ul
        if(s<0)
          s=0;

        if(p[j]>=i)
          s+=i;

        if(s>max)
          max=s;
      }
    }
  }

  fout=fopen("carnati.out","w");
  fprintf(fout,"%d\n",max-c);
  fclose(fout);
  return 0;
}