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

来源:互联网 发布:php静态计数器 编辑:程序博客网 时间:2024/05/21 08:49
#include <bits/stdc++.h>using namespace  std;bool record[30];int star = -1;const int MAXN = 1e5+10;char pstr[MAXN];int pslen = 0;char str[MAXN];int slen = 0;bool solve(){    if(slen <= pslen-2) return false;    if(slen == pslen-1 && star == -1) return false;    if(slen != pslen && star == -1) return false;    int sl = 0;    for(int i = 0; i < star; ++i)    {        if(pstr[i] != '?')        {            if(pstr[i] != str[sl])                return false;        }        else if(!record[str[sl]-'a'])            return false;        sl++;    }    int sr = slen-1;    for(int i = pslen-1; i > star; --i)    {        if(pstr[i] != '?')        {            if(pstr[i] != str[sr])                return false;        }        else if(!record[str[sr]-'a'])            return false;        sr--;    }    while(sl <= sr)    {        if(record[str[sl++]-'a'])            return false;    }    return true;}int main(){//    freopen("in.txt","r",stdin);//    freopen("out.txt","w",stdout);    ios::sync_with_stdio(false);    char ch;    while((ch = getchar()) && ch != '\n')        record[ch-'a'] = true;    while((ch = getchar()) && ch != '\n')    {        pstr[pslen++] = ch;        if(ch == '*') star = pslen-1;    }    int n;    scanf("%d",&n);    getchar();    while(n--)    {        slen = 0;        while((ch = getchar()) && ch != '\n')            str[slen++] = ch;        if(solve())            printf("YES\n");        else            printf("NO\n");    }    return 0;}