zoukankan      html  css  js  c++  java
  • code#5 P3 我有矩阵,你有吗?

     

    时间限制: 1.0 秒

    空间限制: 128 MB

    相关文件: 题目目录

    题目描述

    企鹅豆豆手里有两个 01 矩阵 A 和 B。他可以进行两种操作:

    1. 选择 A 矩阵的一行,然后把这一行的 0 变成 1,把 1 变成 0
    2. 选择 A 矩阵的一列,然后把这一列的 0 变成 1,把 1 变成 0

    现在他想知道能不能把 A 矩阵通过以上操作变成 B 矩阵。保证 A 矩阵和 B 矩阵的大小一致。

    输入格式

    从标准输入读入数据。

    每个测试点只有一组数据。

    输入的第一行包含两个正整数 n 和 m,表示 A 矩阵的行数,保证 n103m103。 接下来 n 行,每行 m 个由空格隔开的整数,表示矩阵 A。保证矩阵中只有 0 或者 1。 接下来 n 行,每行 m 个由空格隔开的整数,表示矩阵 B。保证矩阵中只有 0 或者 1

    输出格式

    输出到标准输出。

    如果矩阵 A 通过以上两种操作可以变成矩阵 B,输出 Koyi,否则输出 Budexing

    思路:

    在做这道题之前,建议大家先看一下

    [SCOI2005]扫雷

    这两道题在思路上有着相似之处

    我们可以将01矩阵转化一下,生成一个新的矩阵

    如果两个矩阵在该位置相同,那么新矩阵这个位置的值为1

    否则为0

    我们分别假定第一个位置被修改过,没有被修改过

    分别跑一次

    因为要求合法,所以当第一行状态被确定时,后面的状态就全部被确定了

    暴力n*m地扫就行

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<bitset>
    #include<queue>
    #include<cstdlib>
    #include<algorithm>
    #define rii register int i
    #define rij register int j
    using namespace std;
    int ys[1005][1005],mb[1005][1005],now[1005][1005],cs[1005][1005];
    int m,n;
    inline bool cs1()
    {
        for(rii=1;i<=m;i++)
        {
            if(now[1][i]==1)
            {
                for(rij=1;j<=n;j++)
                {
                    now[j][i]=(now[j][i]+1)%2;
                }
            }
        }
        for(rii=2;i<=n;i++)
        {
            int pd=now[i][1];
            for(rij=2;j<=m;j++)
            {
                if(now[i][j]!=pd)
                {
                    return false;
                }
            }
        }
        return true;
    }
    inline bool cs2()
    {
        for(rii=1;i<=m;i++)
        {
            if(now[1][i]==0)
            {
                for(rij=1;j<=n;j++)
                {
                    now[j][i]=(now[j][i]+1)%2;
                }
            }
        }
        for(rii=2;i<=n;i++)
        {
            int pd=now[i][1];
            for(rij=2;j<=m;j++)
            {
                if(now[i][j]!=pd)
                {
                    return false;
                }
            }
        }
        return true;
    }
    int main()
    {
    //    freopen("2.in","r",stdin);
        scanf("%d%d",&n,&m);
        for(rii=1;i<=n;i++)
        {
            for(rij=1;j<=m;j++)
            {
                scanf("%d",&ys[i][j]);
            }
        }
        for(rii=1;i<=n;i++)
        {
            for(rij=1;j<=m;j++)
            {
                scanf("%d",&mb[i][j]);
            }
        }
        for(rii=1;i<=n;i++)
        {
            for(rij=1;j<=m;j++)
            {
                if(ys[i][j]!=mb[i][j])
                {
                    now[i][j]=1;
                    cs[i][j]=1;
                }
            }
        }
        if(cs1()==true)
        {
            puts("Koyi");
            return 0;
        }
        if(cs2()==true)
        {
            puts("Koyi");
            return 0;
        }
        puts("Budexing");
        return 0;
    } 
  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/ztz11/p/9902002.html
Copyright © 2011-2022 走看看