Cod sursa(job #7208)

Utilizator slayer4uVictor Popescu slayer4u Data 21 ianuarie 2007 13:05:19
Problema Elimin Scor 50
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasa a 9-a si gimnaziu Marime 2.68 kb
#include<stdio.h>
long nr,nc,r,c,min,i,n,j,m,sum,mmin,max,sum1,x[700][700];
int main()
{
    freopen ("elimin.in","rt",stdin);
    freopen ("elimin.out","wt",stdout);
    
    scanf("%ld %ld %ld %ld",&n,&m,&r,&c);
    
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
            scanf("%ld",&x[i][j]), x[i][0]+=x[i][j];
    }
    
    for (j=1;j<=m;j++)
        for (i=1;i<=n;i++)
            x[0][j]+=x[i][j];
            
    //first linii
    
    while (nr<r)
    {
                 mmin=2000000000;
                 for (i=1;i<=n;i++)
                     if (x[i][0]<mmin && x[i][0]>=0)
                        mmin=x[i][0],min=i;
                 
                 x[min][0]=-1;
                 
                 for (j=1;j<=m;j++)
                     x[0][j]-=x[min][j], x[min][j]=0;
                 nr++;
    }   
    
    //2nd coloane
    
    while (nc<c)
    {
                 mmin=2000000000;
                 for (j=1;j<=m;j++)
                     if (x[0][j]<mmin && x[0][j]>=0)
                        mmin=x[0][j],min=j;
                 
                 x[0][min]=-1;
                 
                 for (i=1;i<=n;i++)
                     x[i][0]-=x[i][min], x[i][min]=0;
                 nc++;
    } 
    
    sum=0;
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++) sum+=x[i][j];
    
    
    freopen ("elimin.in","rt",stdin);
    
    scanf("%ld %ld %ld %ld",&n,&m,&r,&c);
    
    for (i=1;i<=n;i++)
        x[i][0]=0;
    for (j=1;j<=m;j++)
        x[0][m]=0;
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
            scanf("%ld",&x[i][j]), x[i][0]+=x[i][j];
    }
    for (j=1;j<=m;j++)
        for (i=1;i<=n;i++)
            x[0][j]+=x[i][j];
    nr=nc=0;
    while (nc<c)
    {
                 mmin=2000000000;
                 for (j=1;j<=m;j++)
                     if (x[0][j]<mmin && x[0][j]>=0)
                        mmin=x[0][j],min=j;
                 
                 x[0][min]=-1;
                 
                 for (i=1;i<=n;i++)
                     x[i][0]-=x[i][min], x[i][min]=0;
                 nc++;
    } 
    
    while (nr<r)
    {
                 mmin=2000000000;
                 for (i=1;i<=n;i++)
                     if (x[i][0]<mmin && x[i][0]>=0)
                        mmin=x[i][0],min=i;
                 
                 x[min][0]=-1;
                 
                 for (j=1;j<=m;j++)
                     x[0][j]-=x[min][j], x[min][j]=0;
                 nr++;
    } 
    
    
    sum1=0;
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++) sum1+=x[i][j];
    
    max=sum>sum1?sum:sum1;
    printf("%ld\n",max);        
    return 0;
}