Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

谁的代码比我长?

Posted by liuweibiao at 2012-02-19 14:35:48 on Problem 1753
#include<iostream>
using namespace std;
char s[4][4];
int a[4][4];
int b[4][4];
void flip(int i,int j)
{
	if(i<3)
		b[i+1][j]^=1;
	if(i>0)
		b[i-1][j]^=1;
	if(j<3)
		b[i][j+1]^=1;
	if(j>0)
		b[i][j-1]^=1;
	b[i][j]^=1;
}
int main()
{
	int i,j,k,l,m,n;
	for(i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
		{
			scanf("%c",&s[i][j]);
			if(s[i][j]=='\n')
				j--;
			if(s[i][j]=='b')
				a[i][j]=1;
		}
	}
	int count=0,max=17;
	memcpy(b,a,sizeof(a));
	/*for(i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
			printf("%d",a[i][j]);
		printf("\n");
		for(j=0;j<4;j++)
			printf("%d",b[i][j]);
		printf("\n");
	}*/
	int indix=1;
	for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
	if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==0)
		max=count;
	memcpy(b,a,sizeof(a));
	for(k=0;k<4;k++)
	{
		count=1;
		flip(0,k);
		for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
		if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==0)
			if(max>count)
				max=count;
		memcpy(b,a,sizeof(a));
	}
	for(k=0;k<3;k++)
	{
		for(l=k+1;l<4;l++)
		{
			count=2;
			flip(0,k);
			flip(0,l);
			for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
		if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==0)
			if(max>count)
				max=count;
		memcpy(b,a,sizeof(a));
		}
	}
    for(k=0;k<4;k++)
	{
		count=3;
		for(l=0;l<4;l++)
			if(l!=k)
				flip(0,l);
		for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
		if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==0)
			if(max>count)
				max=count;
		memcpy(b,a,sizeof(a));
	}
	count=4;
	for(k=0;k<4;k++)
		flip(0,k);
	for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
		if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==0)
			if(max>count)
				max=count;
		memcpy(b,a,sizeof(a));
		indix=0;
		count=0;
		//if(max==17)
		//{
			for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
	if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==4)
		if(max>count)
			max=count;
	memcpy(b,a,sizeof(a));
	for(k=0;k<4;k++)
	{
		count=1;
		flip(0,k);
		for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
		if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==4)
			if(max>count)
				max=count;
		memcpy(b,a,sizeof(a));
	}
	for(k=0;k<3;k++)
	{
		for(l=k+1;l<4;l++)
		{
			count=2;
			flip(0,k);
			flip(0,l);
			for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
		if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==4)
			if(max>count)
				max=count;
		memcpy(b,a,sizeof(a));
		}
	}
    for(k=0;k<4;k++)
	{
		count=3;
		for(l=0;l<4;l++)
			if(l!=k)
				flip(0,l);
		for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
		if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==4)
			if(max>count)
				max=count;
		memcpy(b,a,sizeof(a));
	}
	count=4;
	for(k=0;k<4;k++)
		flip(0,k);
	for(i=1;i<4;i++)
	{
		for(j=0;j<4;j++)
		if(b[i-1][j]==indix)
		{
			flip(i,j);
			count++;
		}
	}
		if(b[3][0]+b[3][1]+b[3][2]+b[3][3]==4)
			if(max>count)
				max=count;
		//}
		if(max==17)
			printf("Impossible\n");
		else
			printf("%d\n",max);
		return 0;
		}
		

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator