ABC 264 C - Matrix Reducing(思维)

https://atcoder.jp/contests/abc264/tasks/abc264_c

题目大意:

给定n*m的a矩阵,x*y的b矩阵

问能不能删除若干行和列使a变成b?
Sample Input 1 
4 5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
2 3
6 8 9
16 18 19
Sample Output 1 
Yes

Sample Input 2 
3 3
1 1 1
1 1 1
1 1 1
1 1
2
Sample Output 2 
No

这个题目为什么check部分改成从行开始会寄(wa 17)?我不李姐
但是从列开始一列一列的计算就不会

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdlib>
#include<map>
#include<set>
#include<stack>
#include<queue>
#include<algorithm>
using namespace std;
const int N=200200,M=2002;
int a[M][M],b[M][M];
int n,m,x,y;
bool check(int xx,int yy)
{
    int l=1,r=1;
    for(int j=yy;j<=m;j++)
    {
        l=1;
        for(int i=xx;i<=n;i++)
        {
            if(a[i][j]==b[l][r])
            {
                l++;
            }
            if(l==x+1)
            {
                r++;
                break;
            }
        }
        if(r==y+1) break;
    }
    if(r!=y+1) return false;
    return true;
}
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        cin>>a[i][j];
    cin>>x>>y;
    for(int i=1;i<=x;i++)
        for(int j=1;j<=y;j++)
        cin>>b[i][j];
    bool flag=false;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]==b[1][1])
            {
                if(check(i,j)==true)
                {
                    flag=true;
                    break;
                }
            }
        }
        if(flag==true) break;
    }
    if(flag==true) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
    return 0;
}
posted @ 2022-08-14 09:57  Vijurria  阅读(90)  评论(0编辑  收藏  举报