Codefoces514C - Watto and Mechanism(Tire)

Posted overrate-wsj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codefoces514C - Watto and Mechanism(Tire)相关的知识,希望对你有一定的参考价值。

题意:

给n个模式串,m个匹配串,问是否有只与匹配串相差一个字符的模式串

思路:

直接上Tire,正常插入模式串

匹配时往该节点的儿子节点进行正常匹配,若能匹配成功,就输出YES

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
 using namespace std;
 const int maxn=1e6+10;
 int n,m;
 struct Tire{
     int ch[maxn][3],val[maxn],cnt;
     void init()
     {
         cnt=1;
         memset(ch,0,sizeof(ch));
         val[0]=0;
     }
     void insert(string s){
        int u=0,n=s.length();
        for(int i=0;i<n;i++){
            int c=s[i]-a;
            if(!ch[u][c]) ch[u][c]=cnt++;
            u=ch[u][c];
        }
        val[u]=cnt;
    }
    bool query(string s){
        int u=0,n=s.length(),flag,k;
        for(int i=0;i<n;i++){
            int c=s[i]-a;
            for(int j=0;j<=2;j++){
                if(c==j||ch[u][j]==0) continue;
                int x=ch[u][j];
                flag=1;
                for(int k=i+1;k<n;k++){
                    int y=s[k]-a;
                    if(!ch[x][y]){
                        flag=0;
                        break;
                    }
                    x=ch[x][y];
                }
                if(flag&&val[x]) return true;
            }
            if(!ch[u][c]) return false;
            u=ch[u][c];
        }
        return false;
    }
 }T;
 int main()
 {
     string temp;
    scanf("%d%d",&n,&m);
    T.init();
     for(int i=1;i<=n;i++){
         cin>>temp;
         T.insert(temp);
     }
    for(int i=1;i<=m;i++){
        cin>>temp;
        if(T.query(temp)) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
 }

 

以上是关于Codefoces514C - Watto and Mechanism(Tire)的主要内容,如果未能解决你的问题,请参考以下文章

[二分] Codefoces Anton and Making Potions

CodeForces 518C - Watto and Mechanism(模拟)

codefoces812C-Sagheer and Nubian Market心得

Codeforces 514C. Watto and Mechanism解题报告(字典树)

Codefoces 382E Ksenia and Combinatorics - 动态规划

codefoces_#346E - New Reform(并查集或dfs)