1 solutions

  • 0
    @ 2025-10-20 17:52:49
    #include<bits/stdc++.h>
    using namespace std;
    const int N=20;
    int a[N][N],b[N][N];
    int main()
    {
    	int n,m,n1,m1;
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			cin>>a[i][j];
    		}
    	}
    	cin>>n1>>m1;
    	for(int i=1;i<=n1;i++)
    	{
    		for(int j=1;j<=m1;j++)
    		{
    			cin>>b[i][j];
    		}
    	}
    	for(int i=0;i<(1<<n);i++) //二进制枚举行 
    	{
    		for(int j=0;j<(1<<m);j++) //二进制枚举列 
    		{
    			vector<int> h,w;
    			for(int k=0;k<n;k++) if(i>>k&1) h.push_back(k+1);
    			for(int k=0;k<m;k++) if(j>>k&1) w.push_back(k+1);
    			if(h.size()!=n1||w.size()!=m1) continue; //大小不同 
    			bool match=true;
    			for(int k=1;k<=n1;k++)
    			{
    				for(int l=1;l<=m1;l++)
    				{
    					if(a[h[k-1]][w[l-1]]!=b[k][l])
    					{
    						match=false;
    						break;
    					}
    				}
    			}
    			if(match) //找到了一组合法解 
    			{
    				cout<<"Yes"<<endl;
    				return 0;
    			}
    		}
    	}
    	cout<<"No"<<endl;
    	return 0;
    } 
    

    Information

    ID
    2632
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    3
    Tags
    # Submissions
    5
    Accepted
    3
    Uploaded By