POJ 2965
大神思路:
对于一个“+”,对它所在的行列的每一个位置做题目中的flip,结果是只有该“+”会变成“-”,其余位置没有变化。
于是就对初始状态下所有“+”都做一次上述操作,最终的结果是一部分位置对比初始状态做了奇数次翻转,另一部分做了偶数次。偶数次等于没翻转,因此只要打印出奇数次的位置即可。
94MS
膜拜啊……orz …… orz …… orz orz …… orz …… orz orz …… orz …… orz
#include<iostream>
using namespace std;
bool mark[4][4];
char s[4][4];
int is[16];
int js[16];
int main(){
memset(mark,0,sizeof(mark));
for(int i=0;i<4;i++)
cin>>s[i];
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(s[i][j]=='+'){
mark[i][j]=!mark[i][j];
for(int k=0;k<4;k++){
mark[i][k]=!mark[i][k];
mark[k][j]=!mark[k][j];
}
}
}
}
int count=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(mark[i][j]){
is[count]=i+1;
js[count]=j+1;
count++;
}
}
}
cout<<count<<endl;
for(int i=0;i<count;i++){
cout<<is[i]<<" "<<js[i]<<endl;
}
return 0;
}