Cod sursa(job #644718)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 7 decembrie 2011 16:08:30
Problema Elimin Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.11 kb
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 1000
int n,m,i,j,a[16][N],r,c,k,x,d,u,l[16],q[N],s[33000],v;
int main()
{FILE *f=fopen("elimin.in","r"),*g=fopen("elimin.out","w");
fscanf(f,"%d%d%d%d",&n,&m,&r,&c);
if(n>m)
     {for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
            fscanf(f,"%d",&a[j][i]);
     x=n,n=m,m=x,x=r,r=c,c=x;}
else
     for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
            fscanf(f,"%d",&a[i][j]);
if(r>1)
     {for(k=1;k<=(1<<(n-1));k++)
            {s[k<<1]=s[k],v=0;
            if(k!=(1<<(n-1)))
                    s[(k<<1)+1]=s[k]+1;
            if(s[k]==r-1)
                    v=k<<1;
            else
                    if(s[k]==r-2)
                           v=1+(k<<1);
            if(v)
                    {for(i=1;v;v>>=1)
                           l[i++]=v&1;
                    for(j=1;j<=m;j++)
                           q[j]=0;
                    for(i=1,d=0;i<=n;i++)
                    if(!l[i])
                           for(j=1;j<=m;j++)
                                  q[j]+=a[i][j],d+=a[i][j];
                    else
                           l[i]=0;
                    sort(q+1,q+m+1);
                    for(j=1;j<=c;j++)
                           d-=q[j];
                    if(d>u)
                           u=d;}}}
else
     if(r==1)
             {for(k=1;k<=n;k++)
                    {for(j=1;j<=m;j++)
                           q[j]=0;
                    for(i=1,d=0;i<=n;i++)
                    if(i!=k)
                           for(j=1;j<=m;j++)
                                  q[j]+=a[i][j],d+=a[i][j];
                    sort(q+1,q+m+1);
                    for(j=1;j<=c;j++)
                           d-=q[j];
                    if(d>u)
                           u=d;}}
     else
             if(c)
                    {for(i=1,u=0;i<=n;i++)
                    for(j=1;j<=m;j++)
                           q[j]+=a[i][j],u+=a[i][j];
                    sort(q+1,q+m+1);
                    for(j=1;j<=c;j++)
                           u-=q[j];}
fprintf(g,"%d",u);
return 0;}