zoukankan      html  css  js  c++  java
  • POJ1035_Spell checker_KEY

    题目传送门

    一道暴力可以过的水题。(直接暴力模拟的那种)

    但是我打Trie练练模板,但是TMD因为数组开太小卡了好久。

    code:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <string>
    #include <map>
    #include <algorithm>
    using namespace std;
    
    struct trie{
        int tr[150005][27],cnt,v[150005];
        trie(){memset(tr,0,sizeof tr),memset(v,0,sizeof v),cnt=0;}
        void add(string a)
        {
            int now=0,len=a.size();
                for(int i=0;i<len;i++){
                    if(!tr[now][a[i]-'a'])tr[now][a[i]-'a']=++cnt,now=cnt;
                    else now=tr[now][a[i]-'a'];
                }
            v[now]=1;
        }
        
        int query(string a)
        {
             int now=0,len=a.size(),o=0;
                 for(int i=0;i<len;i++){
                     if(!tr[now][a[i]-'a'])return 0;
                     now=tr[now][a[i]-'a'];
                 }
            return v[now];
        }
    }M;
    
    map<string,int>MP;
    struct node{
        string f;int id;
        node(){f="";id=0;}
    }as[10005];
    string S,ks,t;
    int tot=0;
    inline int cmp(node x,node y){return x.id<y.id;}
    int main()
    {
    //    freopen("x.txt","r",stdin);
        t="";
        int ide=0;
        while(cin>>S,S[0]!='#'){if(MP[S])continue;M.add(S);MP[S]=++ide;}
        while(cin>>S,S[0]!='#'){
            if(M.query(S)){
                cout<<S;cout<<" is correct";puts("");
            }
            else{
                tot=0;
                cout<<S<<':';
                int len=S.size();
                for(int i=0;i<len;i++){
                    for(int j=0;j<26;j++){
                        t=S[i];
                        ks=j+'a';
                        S.erase(i,1),S.insert(i,ks);
                        if(M.query(S))
                            as[++tot].f=S,as[tot].id=MP[S];
                        S.erase(i,1),S.insert(i,t);
                    }
                }
                for(int i=0;i<=len;i++){
                    for(int j=0;j<26;j++){
                        ks=j+'a';
                        S.insert(i,ks);
                        if(M.query(S))
                            as[++tot].f=S,as[tot].id=MP[S];
                        S.erase(i,1);
                    }
                }
                for(int i=0;i<len;i++){
                    t=S[i];
                    S.erase(i,1);
                    if(M.query(S))
                        as[++tot].f=S,as[tot].id=MP[S];
                    S.insert(i,t);
                }
                sort(as+1,as+tot+1,cmp);
                for(int i=1;i<=tot;i++)
                    if(as[i].f!=as[i-1].f)
                        cout<<' '<<as[i].f;
                puts("");
            }
        }
    }
  • 相关阅读:
    Primary key and Unique index
    Hash unique和Sort unique
    Oracle索引扫描算法
    Oracle预估的基数算法
    PGA突破pga_aggregate_target限制
    aix ipcs使用说明
    开窗函数和聚合函数区别
    【39.66%】【codeforces 740C】Alyona and mex
    【81.82%】【codeforces 740B】Alyona and flowers
    Android SDK离线安装
  • 原文地址:https://www.cnblogs.com/Cptraser/p/8564477.html
Copyright © 2011-2022 走看看