• POJ2965The Pilots Brothers' refrigerator


    http://poj.org/problem?id=2965

    这个题的话,一开始也不会做,旁边的人说用BFS,后来去网上看了众大神的思路,瞬间觉得用BFS挺简单易;因为要让一个“+”变为“-”,只要将加号所在的位置(i,j)的行和列上的7个元素全部改变一次,这样的话(i,j)这个点将会变化7次,而 i 行上和 j 列另外六个元素将会变化4次,剩下的那些会变化2次,显而易见的是,一个位置上若翻转偶数次相当于没翻转,所以,只要记录下奇数次的翻转进行相加就可以了。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<cstdlib>
     5 using namespace std ;
     6 char  ans[6][6];
     7 int flag[6][6];
     8 int main()
     9 {
    10     memset(flag,0,sizeof(flag));
    11     for(int i = 0 ; i <= 3 ; i++)
    12     {
    13         scanf("%s",ans[i]);//这个题输入的时候我用的两个for循环输入数组里,但是错了。。
    14     }
    15     for(int i = 0 ; i <= 3 ; i++)
    16     {
    17         for(int j = 0 ; j <= 3 ; j++)
    18         {
    19             //scanf("%c",&ans) ;
    20             if(ans[i][j] == '+')
    21             {
    22                 for(int k = 0 ; k <= 3 ; k++)
    23                 {
    24                     //加号所在的位置行列的翻转次数全加一。
    25                     flag[i][k]++ ;
    26                     flag[k][j]++ ;
    27                 }
    28                 flag[i][j]-- ;//上边两次多加了一次这个,所以在这里减1 ;
    29             }
    30         }
    31     }
    32     int sum = 0 ;
    33     for(int i = 0 ; i <= 3 ; i++)
    34     {
    35         for(int j = 0 ; j <= 3 ; j++)
    36         {
    37             sum += flag[i][j]%2 ;//遍历整个数组,凡是为奇数次的位置之和即为总的操作次数
    38         }
    39     }
    40     printf("%d
    ",sum) ;
    41     for(int i = 0 ; i <= 3 ; i++)
    42     {
    43         for(int j = 0 ; j <= 3 ; j++)
    44         {
    45             if(flag[i][j]%2 == 1)
    46             {
    47                 cout<<i+1<<' '<<j+1<<endl ;
    48             }
    49         }
    50     }
    51     return 0 ;
    52 }
    View Code
  • 相关阅读:
    0827IO作业
    0927集合作业
    初学集合,以及泛型
    异常课——抛出
    Python环境变量配置
    安装Python
    MySQL多表操作
    MySQL增删改查
    Group by分组详解
    MySQL常用函数
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3234636.html
Copyright © 2020-2023  润新知