zoukankan      html  css  js  c++  java
  • 【POJ3190】The Pilots Brothers' refrigerator

    题意

    给定4*4矩阵,把所有的“+”变为“-”,每次修改一个点,将修改与这个点同一行同一列的所有点。

    分析

    有结论:修改一个点,则修改与这个点同一行同一列的所有点(包括这个点),而图中其他所有点都不会被修改,为什么呢?

    
          4 4 4 4
          ↓ ↓ ↓ ↓    
    --> 7 0 0 0 0
    --> 4 0 0 0 0
    --> 4 0 0 0 0
    --> 4 0 0 0 0
    

    假设要修改第一行第一列,则按上述方式,周围一圈的点修改的次数就像图上标的。图内其他点都被修改2次

    所以只有要修改的那个店是奇数次修改,其他点相当于没有修改

    那我们只需要枚举每个“+”,进行结论的修改操作,然后统计哪些点被修改的次数是奇数次(xor n次后答案是1)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    using namespace std;
    #define N 110
    int cnt;
    int a[20][20],color[N*N][2];
    char s[N];
    int main()
    {
        for(int i=1;i<=4;i++)
        {
            scanf("%s",s+1);
            for(int j=1;j<=4;j++)
            {
                if(s[j]=='+')
                {
                    a[i][j]^=1;
                    for(int k=1;k<=4;k++)
                        a[i][k]^=1,a[k][j]^=1;
                }
            }            
        }
        for(int i=1;i<=4;i++)
            for(int j=1;j<=4;j++)
                if(a[i][j])
                    cnt++,color[cnt][0]=i,color[cnt][1]=j;
        printf("%d
    ",cnt);
        for(int i=1;i<=cnt;i++)
            printf("%d %d
    ",color[i][0],color[i][1]);
        return 0;
    }
    “Make my parents proud,and impress the girl I like.”
  • 相关阅读:
    MySQL基础_常见命令
    数据库概述
    Nginx学习笔记
    华为OSPF基础配置实验
    华为RIPv2实验
    华为三层交换实验
    web-debug-server
    花一天时间试玩vsphere6.7(EXSI)服务器版的vmware
    haproxy+keepalived练习
    mailx加163邮箱发邮件
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9601317.html
Copyright © 2011-2022 走看看