AtCoder Beginner Contest 264: C Matrix Reducing

蒟蒻来讲题,还望大家喜。若哪有问题,大家尽可提!

Hello 大家好啊!我们今天讲一下8月13号AtCoder 264比赛的C题——Matrix Reducing!

=========================================================================

目录

题目

原题

难度

题目翻译

思路

代码


题目


原题:

难度:

题目翻译:

本题意思是给我们两个矩阵,问删除第一个矩阵的行和列,能否得到第二个矩阵?

思路


这道题可以化成A矩阵中是否有B矩阵!所以,我们一行一行横着比较,判断是否按B数组横着的顺序,以及数字是否相同!注意:横着比较完一定还要竖着比较!!!竖着比较的时候只需把双重for循环交换一下位置!

横着:

for(int i=0;i<h;i++){
    yy=0;
    for(int j=0;j<w;j++) if(asl[i][j]==bsl[xx][yy]) yy++;
    if(yy==ww) xx++,cnt++;
}

竖着:

for(int i=0;i<w;i++){
    xx=0;
    for(int j=0;j<h;j++) if(asl[j][i]==bsl[xx][yy]) xx++;
    if(xx==hh) yy++,cnt++;
}

不难看出来横着时是i<h j<w,而竖着的时候却是i<w j<h!

代码


#include<bits/stdc++.h>
using namespace std;
int asl[11][11],bsl[11][11];//asl就是原本的矩阵,bsl就是想要的到的矩阵
int main(){
    int h,w,hh,ww,xx,yy,cnt;
    string tmp;
    cin>>h>>w;
    for(int i=0;i<h;i++) for(int j=0;j<w;j++) cin>>asl[i][j];
    cin>>hh>>ww;
    for(int i=0;i<hh;i++) for(int j=0;j<ww;j++) cin>>bsl[i][j];
    if(hh>h or ww>w){//如果B矩阵比A矩阵大,那么便不可能!
        cout<<"No";
        return 0;
    }
    else{
        //横着比较!
        xx=0,yy=0,cnt=0;
        for(int i=0;i<h;i++){
            yy=0;
            for(int j=0;j<w;j++) if(asl[i][j]==bsl[xx][yy]) yy++;
            if(yy==ww) xx++,cnt++;//如果到头了xx++,也说明这一列可以,所以cnt++。
        }
        if(cnt!=hh){//判断是否是否是那么多行
            cout<<"No";
            return 0;
        }
        //竖着比较!
        xx=0;
        yy=0;
        cnt=0;
        for(int i=0;i<w;i++){
            xx=0;
            for(int j=0;j<h;j++) if(asl[j][i]==bsl[xx][yy]) xx++;
            if(xx==hh) yy++,cnt++;//这时判断的是竖着是否到底
        }
        if(cnt!=ww){
            cout<<"No";
            return 0;
        }
        //如果都可以输出Yes!
        cout<<"Yes";
    }
    return 0;
}

本题解就到这里了!喜欢的点个赞谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值