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;
    } 
  • 相关阅读:
    java面向对象
    java 继承
    .net的 http 请求 利用单例减少创建销毁的资源开销 提高利用率
    net core 3.1 swagger文档添加 不用xml配置
    vs code 配置 golang 环境
    .net 使用RabbitMQ demo
    Centos7 上安装配置 RabbitMQ
    C# .net 获取程序运行的路径的几种方法
    c# Windows服务应用程序的创建、安装和卸载
    XCOPY命令 windows 一个文件夹里的文件 快速移到另一个磁盘里
  • 原文地址:https://www.cnblogs.com/ztz11/p/9902002.html
Copyright © 2011-2022 走看看