Cod sursa(job #6943)

Utilizator the_dragon_of_rockTzogorean Alex the_dragon_of_rock Data 21 ianuarie 2007 11:02:36
Problema Elimin Scor 30
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasa a 9-a si gimnaziu Marime 2.26 kb
#include<fstream>
using namespace std;
int a[150][150],m,n,r,c;
int b[150][150];

void citeste()
{
     int i,j;
     ifstream in("elimin.in");
     in>>m>>n>>r>>c;
     for (i=1;i<=m;i++)
         for (j=1;j<=n;j++)
             in>>a[i][j];
     in.close();
}

void sume()
{
     int i,j;
     for (j=1;j<=n;j++)
         for (i=1;i<=m;i++)
                 a[0][j]=a[0][j]+a[i][j];
     for (i=1;i<=m;i++)
         for (j=1;j<=n;j++)
             a[i][0]=a[i][0]+a[i][j];
     
}

void linii(int a[150][150])
{
    int i,j,aux;
    int v[150];
    for (i=1;i<=m;i++)
        v[i]=i;
    for (i=1;i<m;i++) 
        for (j=i+1;j<=m;j++)
            if (a[v[i]][0]>a[v[j]][0])
               {
                   aux=v[i];
                   v[i]=v[j];
                   v[j]=aux;
               }       
    for (i=1;i<=r;i++)
        {
             for (j=1;j<=n;j++)
                 a[0][j]=a[0][j]-a[v[i]][j];
             for (j=0;j<=n;j++)
                 a[v[i]][j]=0;
        }     
}

void coloane(int a[150][150])
{
    int i,j,aux;
    int v[200];
    for (j=1;j<=n;j++)
        v[j]=j;
    for (i=1;i<n;i++)
        for (j=i+1;j<=n;j++)
            if (a[0][v[i]]>a[0][v[j]])
               {
                   aux=v[i];
                   v[i]=v[j];
                   v[j]=aux;
               }
    for (i=1;i<=c;i++)
        {
             for (j=1;j<=m;j++)
                 a[j][0]=a[j][0]-a[j][v[i]];
             for (j=0;j<=m;j++)
                 a[j][v[i]]=0;
        }
}

void copy()
{
     int i,j;
     for (i=0;i<=m;i++)
         for (j=0;j<=n;j++)
             b[i][j]=a[i][j];
}

int sumafin(int a[150][150])
{
    int i,j,s=0;
    for (i=1;i<=m;i++)
        s=s+a[i][0];
    return s;
}

ofstream out("elimin.out");
void afiseaza()
{
     int i,j;
     for (i=0;i<=m;i++)
         {
             for (j=0;j<=n;j++)
                 out<<b[i][j]<<" ";
             out<<"\n";
         }
}

int main()
{
    citeste();
    sume();
    int s1,s2;
    copy();
    
    coloane(a);
    linii(a);
    s1=sumafin(a);
    
    linii(b);
    coloane(b);
    s2=sumafin(b);
    
    if (s1>s2)
       out<<s1;
    else
        out<<s2;
    out.close();
    return 0;
}