Pagini recente » Profil Vasilescu_Cosmin | Profil florinhaja | Cod sursa (job #683653) | Cod sursa (job #3208940) | Cod sursa (job #8678)
Cod sursa(job #8678)
#include <stdio.h>
#include <stdlib.h>
FILE *f,*g;
long **a;
long *sl,*sc;
int compare(const void *a,const void *b)
{
return (*(long*)a-*(long*)b);
}
int main()
{
long n,m,i,j,r,c,mini,minj;
long suma,min;
FILE *f=fopen("elimin.in","rt");
FILE *g=fopen("elimin.out","wt");
fscanf(f,"%ld %ld %ld %ld",&m,&n,&r,&c);
a=(long**)calloc(m,sizeof(long));
suma=0;
sl=(long*)calloc(m,sizeof(long));
sc=(long*)calloc(n,sizeof(long));
for (i=0;i<m;i++)
{
a[i]=(long*)calloc(n,sizeof(long));
for (j=0;j<n;j++)
{
fscanf(f,"%ld",&a[i][j]);
suma+=a[i][j];
sl[i]+=(long)a[i][j];
sc[j]+=(long)a[i][j];
}
}
if (r>0&&c>0)
{
while (r>0&&c>0)
{
i=0;
while (sl[i]<0&&i<m-1)
i++;
j=0;
while (sc[j]<0&&j<n-1)
j++;
min=sl[i]+sc[j]-a[i][j];
mini=i;
minj=j;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (sl[i]+sc[j]-a[i][j]<min&&sl[i]>0&&sc[j]>0)
{
min=sl[i]+sc[j]-a[i][j];
mini=i;
minj=j;
}
suma-=min;
sl[mini]=-1;
sc[minj]=-1;
for (i=0;i<m;i++)
sl[i]-=a[i][minj];
for (j=0;j<n;j++)
sc[j]-=a[mini][j];
r--;
c--;
}
}
i=0;
if (r>0)
qsort(sl,m,sizeof(long),compare);
while (r>0)
{
while (sl[i]<0)
i++;
suma-=sl[i];
i++;
r--;
}
j=0;
if (c>0)
qsort(sc,n,sizeof(long),compare);
while (c>0)
{
while (sc[j]<0)
j++;
suma-=sc[j];
j++;
c--;
}
fprintf(g,"%ld\n",suma);
fclose(f);
fclose(g);
return 0;
}