Cod sursa(job #654036)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 29 decembrie 2011 13:43:03
Problema Elimin Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#define el 700
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int  n,m,l,c,i,j,es,s,col[el],a[el][el],coli[el],smax,t,v[el],poz,lin[el],lini[el];
int main()
{
        f>>n>>m>>l>>c;
        for(i=1; i<=n; i++)
                for(j=1; j<=m; j++) f>>a[i][j];
        for(i=1; i<=n; i++)
                for(j=1; j<=m; j++) coli[j]+=a[i][j],lini[i]+=a[i][j];
        srand(time(0));
        if (l<c)
        for(t=1; t<=10000; t++) {
                for(i=1; i<=m; i++) col[i]=coli[i];
                for(i=1; i<=n; i++) v[i]=0;
                for(poz=rand()%n+1; s<l; poz=rand()%n+1)
                        if (v[poz]==0) v[poz]=1,s++;
                for(i=1; i<=n; i++)
                        if (v[i]==1) for(j=1; j<=m; j++)  col[j]=col[j]-a[i][j];
                sort (col+1,col+n+1);
                for(i=c+1; i<=m; i++)
                        es+=col[i];
                smax=max(smax,es),es=0,s=0;
        }
        else
        {
               for(t=1; t<=10000; t++) {
                for(i=1; i<=n; i++) lin[i]=lini[i];
                for(i=1; i<=m; i++) v[i]=0;
                for(poz=rand()%m+1; s<c; poz=rand()%m+1)
                        if (v[poz]==0) v[poz]=1,s++;
                for(i=1; i<=m; i++)
                        if (v[i]==1) for(j=1; j<=n; j++)  lin[j]=lin[j]-a[j][i];
                sort (lin+1,lin+n+1);
                for(i=c+1; i<=n; i++)
                        es+=lin[i];
                smax=max(smax,es),es=0,s=0;
        }
        }
        g<<smax<<'\n';
        f.close();
        g.close();
        return 0;
}