Cod sursa(job #7802)

Utilizator stef2nStefan Istrate stef2n Data 22 ianuarie 2007 18:06:17
Problema Elimin Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <stdlib.h>

#define infile "elimin.in"
#define outfile "elimin.out"
#define coloana linie
#define cmp_col cmp_lin
struct linie{int pozini,suma;};

FILE *fin,*fout;

inline int cmp_lin(const void *ma, const void *mb)
  {
   linie a=*((linie *)ma);
   linie b=*((linie *)mb);
   return -(a.suma<b.suma)+(a.suma>b.suma);
  }

int main()
{
int i,j,m,n,r,c;
int sumamax;

fin=fopen(infile,"r");
fout=fopen(outfile,"w");
fscanf(fin,"%d %d %d %d",&m,&n,&r,&c);

int x[m+1][n+1];
char usedlin[m+1];
char usedcol[n+1];
for(i=0;i<m;i++)
   usedlin[i]=1;
for(j=0;j<n;j++)
   usedcol[j]=1;

for(i=0;i<m;i++)
   for(j=0;j<n;j++)
      fscanf(fin,"%d",&x[i][j]);

linie A[m+1];
for(i=0;i<m;i++)
  {
   A[i].pozini=i;
   A[i].suma=0;
   for(j=0;j<n;j++)
      A[i].suma+=x[i][j];
  }
qsort(A,m,sizeof(linie),cmp_lin);

for(i=0;i<r;i++)
   usedlin[A[i].pozini]=0;

coloana B[n+1];
for(j=0;j<n;j++)
  {
   B[j].pozini=j;
   B[j].suma=0;
   for(i=0;i<m;i++)
      if(usedlin[i])
        B[j].suma+=x[i][j];
  }
qsort(B,n,sizeof(coloana),cmp_col);

sumamax=0;
for(i=c;i<n;i++)
   sumamax+=B[i].suma;

fprintf(fout,"%d\n",sumamax);
fclose(fin);
fclose(fout);
return 0;
}