Cod sursa(job #1013779)

Utilizator ScDiscoMihai Trifan ScDisco Data 21 octombrie 2013 18:54:42
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int n,m,i,j,k,suma,min_l,min_c,linia,coloana;
long long sl[101],sc[101],a[101][101]; /* sl=suma.linii; sc=suma.coloane...ajuta la testarea a carei valori e mai mica*/
int main()
{
	fin>>n>>m;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			fin>>a[i][j];
	/*acum eu vreau sa fac suma pentru fiecare linie. Le pun in vectorul sl
	si la valoarea cea mai mica  schimb semnele pe coloana aia */
	for(j=1;j<=m;j++)
		{
			++k;
			for(i=1;i<=n;i++) 
				sc[k]+=a[i][j];
		}
	//resetez variabila k pentru scrierea de la inceputul vectorului sc
	k=0;
	/* acum fac suma pentru linii si le pun in vectorul sc si la valoarea cea mai mica schimb */
	for(i=1;i<=n;i++)
	{
		++k;
		for(j=1;j<=n;j++) sl[k]+=a[i][j];
	}
	//acum trebuie sa vad cum fac sa aflu care e mai mica la linii.
	min_c=sc[1];
	for (i=2;i<=n;i++)
		if(sc[i]<min_c) 
			{
				min_c=sc[i];
				coloana=i;
			}
	//acum la coloane
	min_l=sl[1];
	for(j=2;j<=m;j++)
		if(min_l>sl[j]) 
			{
				min_l=sl[j];
				linia=j;
			}
	//acum schimbam valorile de pe linia si coloana cea mai mica cu opusul fiecarui numar
	for(i=1;i<=n;i++)
		a[i][linia]=-(a[i][linia]);
	for(j=1;j<=m;j++)
		a[coloana][j]=-(a[coloana][j]);
	//acum facem suma
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			suma+=a[i][j];
	fout<<suma;
	fout.close();
	return 0;
}