http://poj.org/problem?id=2965
有两种写法,一种是暴力,妥妥的超时了,去搜了一下,发现有捷径可以走;
首先要明白如何只改变图中一点而不影响其他的点,只要把该点所在的行列上所有的点都操作一次就可以了;
先假设整张图为空白,输入到某点为‘+’时,说明需要操作该点,把该点行列上的点标记一下,(如果某点被偶数次操作就会被取消操作)
最后遍历一下数组,找到操作点就可以了;
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
int a[5][5];
int main()
{
char c;
memset(a,0,sizeof(a));
int i,j,k;
for(i=1;i<=4;i++)
{
for(j=1;j<=4;j++)
{
cin>>c;
if(c=='+')
{
a[i][j]=!a[i][j];
for(k=1;k<=4;k++)
{
a[i][k]=!a[i][k];
a[k][j]=!a[k][j];
}
}
}
}
int num=0;
for(i=1;i<=4;i++)
for(j=1;j<=4;j++)
if(a[i][j]) num++;
printf("%d\n",num);
for(i=1;i<=4;i++)
{
for(j=1;j<=4;j++)
if(a[i][j]) printf("%d %d\n",i,j);
}
return 0;
}