Cod sursa(job #89143)

Utilizator BuniakovskiNeguletu Octavian Buniakovski Data 5 octombrie 2007 23:15:40
Problema Elimin Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.38 kb
#include <stdio.h>
#include <alloc.h>

FILE *f=fopen("elimin.in","r");
FILE *g=fopen("elimin.out","w");

struct pnod{
 int info ;
 struct pnod *adr ;
 int row;
 } ;
struct pnod *pmax,*umax,*pmin,*umin;
int suma ;
int mat[100][100];

void max_pe_linii(int k,int i)
{
  struct pnod *nou;
  struct pnod *q;
if (pmax==NULL )
   {
   pmax=(struct pnod *)
   malloc(sizeof(struct pnod));
   pmax->info=k;
   pmax->row=i;
   umax=pmax;
   }
else
 if (k>=pmax->info)
   {
   nou=(struct pnod *)
   malloc(sizeof(struct pnod));
   nou->adr=pmax;
   nou->info=k;
   nou->row=i;
   pmax=nou;
   }
else
 if (k<=umax->info)
   {
   nou=(struct pnod *)
   malloc(sizeof(struct pnod));
   umax->adr=nou;
   nou->adr=NULL;
   nou->info=k;
   nou->row=i;
   umax=nou;
   umax->adr=NULL;
   }
else
 {
  q=pmax;
  while (k<=q->adr->info)
  q=q->adr;
  nou=(struct pnod *)
  malloc(sizeof(struct pnod));
  nou->adr=q->adr;
  q->adr=nou;
  nou->info=k;
  nou->row=i;
  }
}

void min_pe_coloane(int k)
{
  struct pnod *nou;
  struct pnod *q;
if (pmin==NULL )
   {
   pmin=(struct pnod *)
   malloc(sizeof(struct pnod));
   pmin->info=k;
   umin=pmin;
   }
else
 if (k<=pmin->info)
   {
   nou=(struct pnod *)
   malloc(sizeof(struct pnod));
   nou->adr=pmin;
   nou->info=k;
   pmin=nou;
   }
else
 if (k>=umin->info)
   {
   nou=(struct pnod *)
   malloc(sizeof(struct pnod));
   umin->adr=nou;
   nou->adr=NULL;
   nou->info=k;
   umin=nou;
   umin->adr=NULL;
   }
else
 {
  q=pmin;
  while (k>=q->adr->info)
  q=q->adr;
  nou=(struct pnod *)
  malloc(sizeof(struct pnod));
  nou->adr=q->adr;
  q->adr=nou;
  nou->info=k;
  }
}


int main(void){

  int M,N,R,C,i,j,s;
  struct pnod *t;


 fscanf(f,"%d %d %d %d\n",&M,&N,&R,&C);
 for (i=1;i<=N;i++)
  {
  s=0;
  for (j=1;j<=M;j++)
   {
    fscanf(f," %d ",&mat[i][j]);
    s+=mat[i][j];
     }
fscanf(f,"\n");
max_pe_linii(s,i);
    }


suma=0;
 t=pmax;
 for (i=1;i<=N-R;i++)
  {
  suma+=t->info;
  t=t->adr;
  }
  while (t!=NULL)
  {
  for (j=1;j<=M;j++)
  mat[t->row][j]=0;
  t=t->adr;
  }
  for (j=1;j<=M;j++)
  {
   s=0;
   for (i=1;i<=N;i++)
   s+=mat[i][j];
   min_pe_coloane(s);
  }
  s=0;
  t=pmin;
   for (j=1;j<=C;j++)
    {
     s+=t->info;
     t=t->adr;
      }
      suma-=s;
fprintf(g," %d ",suma);
fclose(g);
return 0;
}