比赛 “Asm.Def战记之太平洋”杯 评测结果 WWWWWWWTTT
题目名称 Asm.Def谈笑风生 最终得分 0
用户昵称 asddddd 运行时间 6.021 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2015-11-02 11:19:55
显示代码纯文本
//
//  main.cpp
//  asm_talk
//
//  Created by Qing Liu on 15/11/2.
//  Copyright © 2015年 Qing Liu. All rights reserved.
//

#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include<cstdio>
using namespace std;
vector<string>asd;
string temp;
int pi[33];

bool pipei(int a){
    int p=0;
    string s=asd[a];
    for (int i=1;i<=s.size();i++ ) {
        while (p>0&&s[i-1]!=temp[p]&&temp[p]!='*') {
            p=pi[p];
        }
        if(s[i-1]==temp[p]||temp[p]=='*'){
            p++;
        }
        if(p==temp.size()){
            return 1;
        }
    }
    return 0;
}
void fail(){
    int p=0;
    for (int i=2;i<=temp.size(); i++) {
        while (p>0&&temp[p]!=temp[i-1]&&temp[i-1]!='*') {
            p=pi[p];
        }
        if (temp[p]==temp[i-1]||temp[i-1]=='*') {
            p++;
        }
        pi[i]=p;
    }
}
int main() {
    freopen("asm_talk.in", "r", stdin);
    freopen("asm_talk.out", "w", stdout);
    ios::sync_with_stdio(0);
    int n;
    cin>>n;
    for (int i=0; i<n; i++) {
        int type;
        cin>>type;
        type--;
        if (type) {
            bool psk=0;
            cin>>temp;
            memset(pi, 0, sizeof(pi));
            fail();
            for (int i=0; i<asd.size(); i++) {
                string s=asd[i];
                if (asd.size()!=temp.size()) {
                    continue;
                }
                else{
                    psk+=pipei(i);
                }
            }
            if (psk) 
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
        else{
            string s;
            cin>>s;
            asd.push_back(s);
        }
    }
    return 0;
}