• 【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.”
  • 相关阅读:
    JAVA 数据结构 ConcurrentHashMap
    String|StringBuilder|StringBuffer
    JAVA 数据结构 HashMap
    JVM 经典垃圾收集器大合集
    JVM 垃圾收集算法
    JVM GC内存回收
    跳跃游戏||
    K次取反后最大化数组和
    删除排序链表中的重复元素
    排序链表
  • 原文地址:https://www.cnblogs.com/NSD-email0820/p/9601317.html
Copyright © 2020-2023  润新知