The Pilots Brothers' refrigerator
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 20398   Accepted: 7857   Special Judge

Description

The game “The Pilots Brothers: following the stripy elephant” has a quest where a player needs to open a refrigerator.

There are 16 handles on the refrigerator door. Every handle can be in one of two states: open or closed. The refrigerator is open only when all handles are open. The handles are represented as a matrix 4х4. You can change the state of a handle in any location [i, j] (1 ≤ i, j ≤ 4). However, this also changes states of all handles in row i and all handles in column j.

The task is to determine the minimum number of handle switching necessary to open the refrigerator.

Input

The input contains four lines. Each of the four lines contains four characters describing the initial state of appropriate handles. A symbol “+” means that the handle is in closed state, whereas the symbol “−” means “open”. At least one of the handles is initially closed.

Output

The first line of the input contains N – the minimum number of switching. The rest N lines describe switching sequence. Each of the lines contains a row number and a column number of the matrix separated by one or more spaces. If there are several solutions, you may give any one of them.

Sample Input

-+--
----
----
-+--

Sample Output

6
1 1
1 3
1 4
4 1
4 3
4 4

Source

本题主要是当需要改变某个+为-时,需要将他所在的行与所在的列都需要反转一次,如果反转两次相当与没反,所以每一反转的情况便可以的

最后判断%2时候的情况,==1便是需要反转的,否则不需要反转

‘#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int temp[4][4],ans[4][4];
char a[4][4];
int main(){
   memset(temp,0,sizeof(temp));
   memset(a,0,sizeof(a));
   memset(ans,0,sizeof(ans));
   for(int i=0;i<4;i++){
      for(int j=0;j<4;j++){
         scanf("%c",&a[i][j]);
         if(a[i][j]=='+')
         temp[i][j]=1;
         else
         temp[i][j]=0;
      }
      getchar();
   }
   for(int i=0;i<4;i++){
     for(int j=0;j<4;j++){
        if(temp[i][j]==1){
           for(int k=0;k<4;k++){
               ans[i][k]+=1;
               ans[k][j]+=1;
           }
           ans[i][j]-=1;

}
     }
   }
   int x[16],y[16];
   memset(x,0,sizeof(x));
  memset(y,0,sizeof(y));
   int count=0;
   for(int i=0;i<4;i++){
     for(int j=0;j<4;j++){
         if(ans[i][j]%2==1){
             x[count]=i;
             y[count]=j;
             count++;
         }
     }
    }
    cout<<count<<endl;
    for(int i=0;i<count;i++){
       cout<<x[i]+1<<" "<<y[i]+1<<endl;
    }

return 0;
}

最新文章

  1. (四)Spark集群搭建-Java&amp;Python版Spark
  2. Alpha阶段第六次Scrum Meeting
  3. Python数据结构与算法设计总结篇
  4. Winform_播放声音文件
  5. 第二百四十三天 how can I 坚持
  6. Qt中添加背景图片的方法
  7. checkbox全选和反选
  8. c++中的名字查找
  9. 基于DateTime Picker修改成类似旅游网站出发日期选择的功能
  10. NSFileHandle编写json数据格式
  11. cocos2dX 事件之触摸事件和触摸事件集合
  12. Spark工作机制简述
  13. linux之有名管道
  14. structs2的核心和工作原理
  15. Flex内存泄露解决方法和内存释放优化原则
  16. jieba库的使用和好看的词元
  17. C++遍历目录和文件夹
  18. 第42件事 移动App设计的11大法则
  19. [Week17] 个人阅读作业
  20. springboot 解决 woff2、ttf 跨域无法解析问题

热门文章

  1. 第三十一课:JSDeferred详解2
  2. Grovvy Step byStep Examples
  3. iOS--SDAutolayout宽度自适应
  4. 每天一个linux命令(36):top命令
  5. Missing message for key &quot;err1&quot; in bundle &quot;(default bundle)&quot; for locale zh_CN
  6. nginx location的配置
  7. iOS开发小技巧--字典和数组的中文输出
  8. netbeans 快捷键
  9. 获取和设置tinyMCE 4编辑器的内容
  10. 【BZOJ-2879】美食节 最小费用最大流 + 动态建图