Pagini recente » Istoria paginii runda/yabadabadoo/clasament | Cod sursa (job #3002660) | Cod sursa (job #1868017) | Borderou de evaluare (job #956290) | Cod sursa (job #1969663)
#include<fstream>
#include<iomanip>
using namespace std;
fstream fin("flip.in",ios::in),
fout("flip.out",ios::out);
long a[18][18];
void read(int nl, int nc);
int sum_line(int l, int nc);
int sum_col(int c, int nl);
int total(int nc);
int suma(int nl, int nc);
void flip_line(int l, int nc);
void flip_col(int nl, int c);
void min_value(int nl, int nc)
{
int i,j;
long m;
m=a[1][0];a[nl+1][0]=1;a[0][nc+1]=0;
for(i=1;i<=nl;i++)
if(a[i][0]<m)
{
m=a[i][0];
a[nl+1][0]=i;
a[0][nc+1]=0;
}
for(j=1;j<=nc;j++)
if(a[0][j]<m)
{
m=a[0][j];
a[nl+1][0]=0;
a[0][nc+1]=j;
}
a[nl+1][nc+1]=m;
}
void init_sums(int nl, int nc)
{
int i,j;
for(i=1;i<=nl;i++)
a[i][0]=sum_line(i,nc);
for(j=1;j<=nc;j++)
a[0][j]=sum_col(j,nl);
}
void write(int nl, int nc)
{
int i,j;
for(i=0;i<=nl+1;i++)
{
for(j=0;j<=nc+1;j++)
fout<<setw(5)<<right<<a[i][j]<<' ';
fout<<endl;
}
}
int main()
{
int n,m,i,j;
long S;
fin>>n>>m;
read(n,m);
init_sums(n,m);
min_value(n,m);
while(a[n+1][m+1]<0)
{
if(a[n+1][0]!=0)
{
flip_line(a[n+1][0],m);
init_sums(n,m);
min_value(n,m);
}
if(a[0][m+1]!=0)
{
flip_col(a[0][m+1],n);
init_sums(n,m);
min_value(n,m);
}
}
write(n,m);
//fout<<total(m);
fin.close();
fout.close();
return 0;
}
void read(int nl, int nc)
{
int i,j;
for(i=1;i<=nl;i++)
for(j=1;j<=nc;j++)
fin>>a[i][j];
}
int sum_line(int l, int nc)
{
long s=0;
for(int j=1;j<=nc;j++)
s+=a[l][j];
return s;
}
int sum_col(int c, int nl)
{
long s=0;
for(int i=1;i<=nl;i++)
s+=a[i][c];
return s;
}
void flip_line(int l, int nc)
{
int j;
for(j=1;j<=nc;j++)
{
a[l][j]*=(-1);
}
}
void flip_col(int c, int nl)
{
int i;
for(i=1;i<=nl;i++)
a[i][c]*=(-1);
}
int total(int nc)
{
int j;
long s=0;
for(j=1;j<=nc;j++)
s+=a[0][j];
return s;
}