题目链接:http://codeforces.com/contest/832/problem/B

B. Petya and Exam

time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

It's hard times now. Today Petya needs to score 100 points on Informatics exam. The tasks seem easy to Petya, but he thinks he lacks time to finish them all, so he asks you to help with one..

There is a glob pattern in the statements (a string consisting of lowercase English letters, characters "?" and "*"). It is known that character "*" occurs no more than once in the pattern.

Also, n query strings are given, it is required to determine for each of them if the pattern matches it or not.

Everything seemed easy to Petya, but then he discovered that the special pattern characters differ from their usual meaning.

A pattern matches a string if it is possible to replace each character "?" with one good lowercase English letter, and the character "*" (if there is one) with any, including empty, string of bad lowercase English letters, so that the resulting string is the same as the given string.

The good letters are given to Petya. All the others are bad.

Input

The first line contains a string with length from 1 to 26 consisting of distinct lowercase English letters. These letters are good letters, all the others are bad.

The second line contains the pattern — a string s of lowercase English letters, characters "?" and "*" (1 ≤ |s| ≤ 105). It is guaranteed that character "*" occurs in s no more than once.

The third line contains integer n (1 ≤ n ≤ 105) — the number of query strings.

n lines follow, each of them contains single non-empty string consisting of lowercase English letters — a query string.

It is guaranteed that the total length of all query strings is not greater than 105.

Output

Print n lines: in the i-th of them print "YES" if the pattern matches the i-th query string, and "NO" otherwise.

You can choose the case (lower or upper) for each letter arbitrary.

Examples

input

ab
a?a
2
aaa
aab

output

YES
NO

input

abc
a?a?a*
4
abacaba
abaca
apapa
aaaaax

output

NO
YES
NO
YES

Note

In the first example we can replace "?" with good letters "a" and "b", so we can see that the answer for the first query is "YES", and the answer for the second query is "NO", because we can't match the third letter.

Explanation of the second example.

  • The first query: "NO", because character "*" can be replaced with a string of bad letters only, but the only way to match the query string is to replace it with the string "ba", in which both letters are good.
  • The second query: "YES", because characters "?" can be replaced with corresponding good letters, and character "*" can be replaced with empty string, and the strings will coincide.
  • The third query: "NO", because characters "?" can't be replaced with bad letters.
  • The fourth query: "YES", because characters "?" can be replaced with good letters "a", and character "*" can be replaced with a string of bad letters "x".

题目大意:

  给定一个字符串,都是'a'~'z'中的字符,我们定义为好字符。

  给定一个母串,并询问n个子串能否有正确结果符合如下:

    1.母串'?'可以替换成任何好字符

    2.'*'只能被一个或多个坏字符,或空字符替换。

解题思路

  简单字符串模拟,主要难在母串有'*'时候,分别比较'*'前后两部分是否符合1操作,

 再询问子串其他部分是否有坏字符即可。具体看代码吧- -

AC代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define For(I,A,B) for(int I=(A);I<(B);++I)
#define Rep(I,N) For(I,0,N)
#define mem(A,val) memset(A,val,sizeof(A))
const int maxn=1e5+;
int n,len1,len2,pos;
bool star=false,flag,vis[];
int main()
{
string a,b,str;
cin>>str>>a>>n;
mem(vis,false);
Rep(i,str.size())
vis[str[i]-'a']=true; //能替换的字符我们标记为好字符
Rep(i,a.size())
if(a[i]=='*') { star=true;pos=i;break; }
while(n--)
{
cin>>b;
flag=false;
len1=a.size(); len2=b.size();
if((star&&len1-len2>) || (!star&&len2!=len1))
{ puts("NO");continue; } //长度都不符合就直接NO了
if(!star)
{ //母串无'*'时候随便比较下就是了
for(int i=;i<len1&&!flag;i++)
{
if(a[i]==b[i] || (a[i]=='?'&&vis[b[i]-'a']))
continue;
else flag=true;
}
}
else
{ //母串有‘*’时
for(int i=;i<pos&&!flag;i++)
{ //‘*’前面的部分,母串子串按规则比较
if(a[i]==b[i] || (a[i]=='?'&&vis[b[i]-'a']))
continue;
else flag=true;
}
int k=len2-;
for(int j=len1-;j>pos;j--,k--)
{ // ‘*’后面的部分,母串子串依旧要按规则比较
if(b[k]==a[j]||(a[j]=='?'&&vis[b[k]-'a']))
continue;
else flag=true;
}
if(!flag)
{ //按题意,子串剩余部分,应该是一些坏字符
for(int i=pos;i<=k&&!flag;i++)
{
if(vis[b[i]-'a']) flag=true;
}
}
}
if(flag) puts("NO");
else puts("YES");
}
return ;
}

Codeforces Round #425 (Div. 2) B. Petya and Exam(字符串模拟 水)的更多相关文章

  1. Codeforces Round #425 (Div. 2) B - Petya and Exam

    地址:http://codeforces.com/contest/832/problem/B 题目: B. Petya and Exam time limit per test 2 seconds m ...

  2. Codeforces Round #481 (Div. 3) G. Petya's Exams (贪心,模拟)

    题意:你有\(n\)天的时间,这段时间中你有\(m\)长考试,\(s\)表示宣布考试的日期,\(d\)表示考试的时间,\(c\)表示需要准备时间,如果你不能准备好所有考试,输出\(-1\),否则输出你 ...

  3. Codeforces Round #425 (Div. 2))——A题&&B题&&D题

    A. Sasha and Sticks 题目链接:http://codeforces.com/contest/832/problem/A 题目意思:n个棍,双方每次取k个,取得多次数的人获胜,Sash ...

  4. Codeforces Round #425 (Div. 2) Problem B Petya and Exam (Codeforces 832B) - 暴力

    It's hard times now. Today Petya needs to score 100 points on Informatics exam. The tasks seem easy ...

  5. 【Codeforces Round #425 (Div. 2) B】Petya and Exam

    [Link]:http://codeforces.com/contest/832/problem/B [Description] *能代替一个字符串(由坏字母组成); ?能代替单个字符(由好字母组成) ...

  6. Codeforces Round #510 (Div. 2) D. Petya and Array(树状数组)

    D. Petya and Array 题目链接:https://codeforces.com/contest/1042/problem/D 题意: 给出n个数,问一共有多少个区间,满足区间和小于t. ...

  7. Codeforces Round #425 (Div. 2)C

    题目连接:http://codeforces.com/contest/832/problem/C C. Strange Radiation time limit per test 3 seconds ...

  8. Codeforces Round #425 (Div. 2)

    A 题意:给你n根棍子,两个人每次拿m根你,你先拿,如果该谁拿的时候棍子数<m,这人就输,对手就赢,问你第一个拿的人能赢吗 代码: #include<stdio.h>#define ...

  9. Codeforces Round #425 (Div. 2) Problem D Misha, Grisha and Underground (Codeforces 832D) - 树链剖分 - 树状数组

    Misha and Grisha are funny boys, so they like to use new underground. The underground has n stations ...

随机推荐

  1. [VBS]检测计算机各硬件信息

    1)批处理脚本:Rhea_HardwareInfoCollector.bat 调用VBScript脚本Rhea_HardwareInfoCollector.vbs,并将结果打印到文件Rhea_Resu ...

  2. input.text文件提示效果

    <div class="search"><input type="text" value="Seach Products" ...

  3. windows mysql绿色版配置

    MySQL绿色版安装 1.下载地址 https://dev.mysql.com/downloads/mysql/ 2.配置my.ini 文件 解压下载文件到指定目录.如: my.ini文件内容: [m ...

  4. mysql 添加外键详解

    为已经添加好的数据表添加外键: 语法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字 ...

  5. jquery中ajax处理跨域的三大方式

    一.处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问.但ie10以下不支持 只需要在服务端填上响应头: ? 1 2 ...

  6. 2018.12.15 spoj Substrings(后缀自动机)

    传送门 后缀自动机基础题. 求长度为iii的子串出现次数的最大值. 对原串建出samsamsam,然后用sizsizsiz更新每个maxlenmaxlenmaxlen的答案. 然后由于后缀链接将其转化 ...

  7. Android APP测试流程

    一. Monkey测试(冒烟测试) 使用monkey测试工具进行如下操作: 1. APP的安装 2. APP随机操作测试(APP压力测试) 3. APP的卸载 二. 安装卸载测试 1. 使用测试真机进 ...

  8. Win7 VS2015及MinGW环境编译FFMPEG-20160326

    因为又要弄MinGW了,所以顺便把FFMPEG编译了,文章主要参考这篇,防抽所以复制一遍,顺便加些自己的内容 http://blog.csdn.net/finewind/article/details ...

  9. FontAwesome 4.7.0 中完整的675个图标样式CSS参考

    FontAwesome 4.7.0 中完整的675个图标样式CSS参考 用法:首先引入CSS文件:<link href="https://maxcdn.bootstrapcdn.com ...

  10. 表单提交textarea内容,第一次获取不到值,第二次才能获取到的解决方法:

    因为KindEditor的可视化操作在新创建的iframe上执行,代码模式下的textarea框也是新创建的,所以最后提交前需要执行 sync() 将HTML数据设置到原来的textarea. Kin ...