Cod sursa(job #206703)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 8 septembrie 2008 22:37:28
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 5.31 kb
#include<stdio.h>
long int n,m,i,j,a[16][16],ca,vert,verl,numn,nump,vap[17],ci,ap[15],bp[15],cb,k,lim,tr,l,c,van[17],an[15],bn[15],ver1,suma[50];
main()
{
freopen("flip.in","r",stdin);
freopen("flip.out","w",stdout);
scanf("%ld%ld",&n,&m);vert=1;
for (i=0; i<n;i++)
{
	verl=1;
  for (j=0; j<m; j++)
	{  scanf("%ld",&a[i][j]);
		if (a[i][j]<0) {vert=0; verl=0;}
	} 
  if (verl==0)
  {
  numn=0; nump=0;
  for (j=0; j<m; j++)
  {
	  if (a[i][j]>0)
	  {nump++;vap[nump]=j;
	  if (nump==1)
	  {
	  ci=0; ca=a[i][j];
	  while (ca) {ci++; ap[ci]=ca%10; ca/=10;} ap[0]=ci;
	  }
	  else
	  {
		cb=a[i][j];
		ci=0;
		while (cb)
		{
		  ci++;
		 bp[ci]=cb%10;
		 cb/=10;
		}
		bp[0]=ci;
		if (ap[0]>=bp[0]) lim=ap[0];
		else {lim=bp[0];ap[0]=bp[0];}
		tr=0;
		for (l=1; l<=lim; l++)
		{
		  c=ap[l]+bp[l]+tr;
		  ap[l]=c%10;
		  tr=c/10;
		}
		if (tr>=1)
		{
		  ap[0]++;
		  ap[ap[0]]=tr;
		}
		for (l=1; l<=bp[0]; l++)
		bp[l]=0;
		bp[0]=0;
	}
	  }
	  else
		  if (a[i][j]<0)
			{ 	numn++;
			     a[i][j]=(-1)*a[i][j];van[numn]=j;
				if (numn==1)
				{ci=0;
				ca=a[i][j];
				while (ca)
				{ci++; an[ci]=ca%10;ca/=10;}
				an[0]=ci;
				}
				else
				{
				cb=a[i][j];
				ci=0;
				while (cb){ci++; bn[ci]=cb%10; cb/=10;  }
				bn[0]=ci;
				if (an[0]>=bn[0]) lim=an[0];
				else {lim=bn[0];an[0]=bn[0];}
				tr=0;
				for (l=1; l<=lim; l++)
				{ c=an[l]+bn[l]+tr;  an[l]=c%10;  tr=c/10;	}
				if (tr>=1)
				{an[0]++;
				  an[an[0]]=tr; }
				for (l=1; l<=bn[0]; l++)bn[l]=0;bn[0]=0;
				}
			}

  }
  if (ap[0]==an[0])
		{
			ver1=0;
			for (j=1; j<=an[0]; j++)
				if (ap[j]<an[j]) {ver1=1; break;}
			if (ver1==1)
			    for (j=1; j<=nump; j++) a[i][vap[j]]=(-1)*a[i][vap[j]];
			else
				for (j=1; j<=numn; j++) a[i][van[j]]=(-1)*a[i][van[j]];
		}
		else
			if (ap[0]>an[0])
				for (j=1; j<=numn; j++) a[i][van[j]]=(-1)*a[i][van[j]];
							else
			  for (j=1; j<=nump; j++) a[i][vap[j]]=(-1)*a[i][vap[j]];

	   }

	//for (j=ap[0]; j>=1; j--) printf("%ld",ap[j]);printf("\n");
	for (j=1; j<=ap[0];j++) ap[j]=0; ap[0]=0;
	//for (j=an[0]; j>=1; j--) printf("%ld",an[j]);printf("\n");
	for (j=1; j<=an[0];j++) an[j]=0; an[0]=0;
	
  }

  if (vert==1)
   {
     for (i=0; i<n; i++)
	 {
		ci=0;
		ca=a[i][0];
		while (ca)
		{ci++; ap[ci]=ca%10;ca/=10;}
		ap[0]=ci;
	   for (j=1; j<m; j++)
	   {cb=a[i][j];ci=0;
		while (cb){ci++; bp[ci]=cb%10; cb/=10; }
		bp[0]=ci;
		if (ap[0]>=bp[0]) lim=ap[0];
		else {lim=bp[0];ap[0]=bp[0];}
		tr=0;
		for (l=1; l<=lim; l++)
		{c=ap[l]+bp[l]+tr; ap[l]=c%10; tr=c/10;	}
		if (tr>=1)
		{ ap[0]++;  ap[ap[0]]=tr;   }
		for (l=1; l<=bp[0]; l++)
			bp[l]=0;
			bp[0]=0;
	   }
	 }
	 for (i=ap[0]; i>=1; i--) printf("%ld",ap[i]);
   }
  else
  {
  for (i=0; i<m; i++)
  {	  verl=1; ci=i;  numn=0; nump=0;
	for (j=0; j<n;j++)
	{
	if (a[j][i]<0)
		{numn++;a[j][i]=(-1)*a[j][i];van[numn]=i;
			if (numn==1)
			{ ci=0;
				ca=a[j][i];
				while (ca)
				{ci++; an[ci]=ca%10;ca/=10;}
				an[0]=ci;
				}
			else
			{cb=a[j][i];  ci=0;
			while (cb) { ci++;  bn[ci]=cb%10;  cb/=10;   }
			bn[0]=ci;
			if (an[0]>=bn[0]) lim=an[0];
			else {lim=bn[0];an[0]=bn[0];}
			tr=0;
			for (l=1; l<=lim; l++)
			{ c=an[l]+bn[l]+tr;  an[l]=c%10; tr=c/10;}
			if (tr>=1)
			{  an[0]++;   an[an[0]]=tr;  }
			for (l=1; l<=bn[0]; l++)bn[l]=0;
			bn[0]=0;
			}				
		}
	else
		if (a[j][i]>0)
		{nump++;vap[nump]=i;
		if (nump==1)
		{ ci=0;ca=a[j][i];while (ca){ci++; ap[ci]=ca%10;ca/=10;}
		ap[0]=ci;}
		else 
		{cb=a[j][i]; ci=0;
		while (cb) { ci++; bp[ci]=cb%10;  cb/=10;  }
		bp[0]=ci;
		if (ap[0]>=bp[0]) lim=ap[0];
		else {lim=bp[0];ap[0]=bp[0];}
		tr=0;
		for (l=1; l<=lim; l++)
		{ c=ap[l]+bp[l]+tr;
		  ap[l]=c%10;
		  tr=c/10;}
		if (tr>=1)
		{ ap[0]++;ap[ap[0]]=tr;}
		for (l=1; l<=bp[0]; l++)bp[l]=0;
		bp[0]=0;
		}
		}
	}
	if (ap[0]==an[0])
		{
			ver1=0;
			for (j=1; j<=an[0]; j++)
				if (ap[j]<an[j]) {ver1=1; break;}
			if (ver1==1)
			{tr=0;
			for (k=1; k<=an[0]; k++){ an[k]=an[k]-ap[k]-tr;ap[k]=an[k];
			if (an[k]<0) { tr=1; an[k]=an[k]+10; ap[k]=an[k];}
			 else tr=0;}
			while (an[an[0]]==0) an[0]--;           ap[0]=an[0];
			}
			else
			{tr=0;
			for (k=1; k<=ap[0]; k++)
			{ap[k]=ap[k]-an[k]-tr;
			 if (ap[k]<0) { tr=1; ap[k]=ap[k]+10; }
			 else	tr=0;
			}
			while (ap[ap[0]]==0) ap[0]--;
			}
		}
		else
			if (ap[0]>an[0])
			{tr=0;
			for (k=1; k<=ap[0]; k++)
			{ap[k]=ap[k]-an[k]-tr;
			 if (ap[k]<0) { tr=1; ap[k]=ap[k]+10; }
			 else	tr=0;
			}
			while (ap[ap[0]]==0) ap[0]--;}
			else
			{tr=0;
			for (k=1; k<=an[0]; k++){ an[k]=an[k]-ap[k]-tr;ap[k]=an[k];
			if (an[k]<0) { tr=1; an[k]=an[k]+10;ap[k]=an[k]; }
			 else tr=0;}
			while (an[an[0]]==0) an[0]--;
			ap[0]=an[0];

			}


       //for (j=ap[0]; j>=1; j--) printf("%ld",ap[j]);printf("\n");
	if (i>0)
	{
	if (suma[0]>=ap[0]) lim=suma[0];
    else {lim=ap[0];suma[0]=ap[0];}
    tr=0;
    for (j=1; j<=lim; j++)
	{
	  c=ap[j]+suma[j]+tr;
	  suma[j]=c%10;
	  tr=c/10;
	}
    if (tr>=1)
    {
      suma[0]++;
      suma[suma[0]]=tr;
    }
    for (j=1; j<=ap[0]; j++)
	ap[j]=0;
    ap[0]=0;
	}
	else
	{suma[0]=ap[0];
	for(j=1; j<=ap[0]; j++)suma[j]=ap[j];}
	for (j=1; j<=ap[0];j++) ap[j]=0; ap[0]=0;
	}  }
  for (i=suma[0]; i>=1; i--) printf("%ld", suma[i]);
  }