洛谷 P8038 题解

题目传送门


题意:

  • 给定一个 \(N×M\) 的矩阵,然后有 \(Q\) 次询问。
  • 每次询问有一个长度为 \(M\) 的序列,求原矩阵中和给定序列匹配的行数。
  • 这里的匹配是指:序列中的每个数和原矩阵中对应位置的数相同或者原矩阵位置上的数是 \(-1\)

思路:

当序列中的数为 \(-1\) 时,可以将它变成任意数,所以我们只需要考虑序列中的数(除 \(-1\) 以外)和原矩阵中对应位置的数是否相同就可以。


code:

#include <bits/stdc++.h>
using namespace std;

int n,m,q,ans;
int b[1005][1005],t[1005];

int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>b[i][j];
	cin>>q;
	for(int i=1;i<=q;i++){
		ans=0;
		for(int j=1;j<=m;j++)	cin>>t[j];
		for(int k=1;k<=n;k++){
			int f=1;
			for(int z=1;z<=m;z++){
				if(t[z]!=-1 && t[z]!=b[k][z]){
					f=0;break;
				}			
			}
			ans+=f;
		}
		cout<<ans<<endl;
	}
	return 0;
}
posted @ 2022-03-06 18:43  Black--Panda  阅读(42)  评论(0编辑  收藏  举报