列表

详情


NC15157. 小H和密码

描述

    小H在击败怪兽后,被一个密码锁挡住了去路
    密码锁由N个转盘组成,编号为1~N,每个转盘有M个位置,每个位置上要么有一个小写字母,要么没有任何字符。一个密码能被转盘表示出,当且仅当指定每个转盘上面的某一个位置,然后将这些位置按照所属的转盘编号顺次连接(空位置直接忽略),可以得到这个密码
    小H并没有得到任何线索,因此只能猜,她一共猜了Q次,但并不知道自己猜的密码能否被表示出来,于是她向你求助

输入描述

第1行,三个整数N,M,Q
第2~N+1行,每行一个长度为M的字符串,依次表示每个转盘上的字符
第N+2~N+Q+1行,每行一个长度不超过10000的字符串,表示小H猜的密码
2≤N,Q≤300,2≤M≤27,同一个转盘上每种字符最多出现一次

输出描述

输出Q行,每行都是YES或NO,依次表示小H猜的每个字符串能否被表示出

示例1

输入:

3 2 3 
a# 
ab 
bc 
aa 
bb 
ba

输出:

NO
YES
NO

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 13ms, 内存消耗: 864K, 提交时间: 2018-02-23 19:12:59

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

int n,m,q,b[305][256];
char a[305][30],s[10010];

void work()
{
	scanf("%d %d %d",&n,&m,&q);
	for (int i=1; i<=n; i++)
		{
			scanf("%s",a[i]+1);
			for (int j=1; j<=m; j++)
				b[i][int(a[i][j])]=1;
		}
	for (int i=1,j,len; i<=q; i++)
		{
			scanf("%s",s+1),len=strlen(s+1),j=1;
			for (int k=1; k<=n&&j<=len; k++)
				if (b[k][int(s[j])])
					j++;
			puts(j>len?"YES":"NO");
		}
}

int main()
{
	work();
	return 0;
}

上一题