• COGS 2082. Asm.Def谈笑风生


    ★   输入文件:asm_talk.in   输出文件:asm_talk.out   简单对比
    时间限制:2 s   内存限制:256 MB

    【题目描述】

    “人呐都不知道,自己不可以预料,直升机刚一出圣地亚哥就把我丢到你们船上,说中央已经决定了,让我来帮忙监听无线电信号……”

    美国海军“无蛤”号电子测量船的船长,斯科特·华莱士继续把玩着手中的鸭嘴笔,“咱们就在你要监听的那个人工智能舰队眼皮底下,你怎么知道这么作死没问题?”

    “管它呢,我告诉你一点人生的经验,有事就坐那个撤,”Asm.Def瞟了一眼窗外为“无蛤”号护航的151“雪风”号驱逐舰,“它跑得比谁都快。”

    华莱士的内心此时是崩溃的。“来人,把Asm.Def塞进意大利炮,打出去。我从未见过有如此厚颜……”

    “住手!”Asm.Def大喊。

    “我们在圣地亚哥找到的数据表明,人工智能发出的无线电信号遵循一定模式,据此可以预测它们的行动。”

    Asm.Def检测到了一系列无线电信号,每个信号都是由小写字母组成,长度<=20的字符串。他有时会查询,某个字符串T是否已被检测到。T中可能会包含一个通配符“*”,代表这一位可以是任意字母。

    【输入格式】

    第一行一个整数m,表示操作数量。

    接下来m行每行一个操作,为如下两种之一:

    1 S:表示Asm.Def新检测到了一个信号S。

    2 T:表示查询信号T是否已被检测到。有则输出“YES”,否则输出“NO”。T中至多包含一个通配符“*”。

    【输出格式】

    对每个2操作,输出一行“YES”或“NO”。

    【样例输入】

    6
    1 ab
    2 ab*
    1 abc
    1 adc
    2 *d
    2 abc

    【样例输出】

    NO
    NO
    YES

    【提示】

    数据范围:

    70%的数据,m<=1000.

    100%的数据,m<=10^5.

    S、T都是长度不超过20的小写字母串,但T中可能包含通配符。

    【来源】

    在此键入。

    mmp 气死我了

    mmp 气得我都splay了

    mmp 本来写的好好的trie树 本地测试各种过,评测机测试各种WA 

    mmp 强行改的set

    mmp trie树代码理论上过了。。(无用的自我安慰)

    屠龙宝刀点击就送

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <set>
    
    using namespace std;
    int n;
    string a;
    set<string>se;
    bool find_(string b)
    {
        if(se.count(b) )
            return true;
        for(int i=b.size();~i;i--)
        {
            if(b[i]=='*')
            {
                for(int j=0;j<26;j++)
                {
                    b[i]=j+'a';
                    if(se.count(b) ) return true;
                }
            }
        }
        return false;
    }
    int main()
    {
        freopen("asm_talk.in","r",stdin);
        freopen("asm_talk.out","w",stdout);
        scanf("%d",&n);
        for(int opt;n--;)
        {
            scanf("%d",&opt);
            cin>>a;
            if(opt==1) se.insert(a);
            else find_(a)?printf("YES
    "):printf("NO
    ");
        }
        return 0;
    }

    理论上过的trie树。。

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <cstdio>
    using namespace std;
    struct node
    {
        int cnt;
        node * next[30];
        bool exict;
    }*root;
    int tot=0,m;
    node * create()
    {
        node * rt=new node;
        memset(rt->next,0,sizeof(rt->next));
        rt->cnt=0;
        rt->exict=0;
        return rt;
    }
    void ins(string a)
    {
        node *p=root;
        for(int i=0;i<a.length();i++)
        {
            int id=a[i]-'a'+1;
               if(p->next[id]==0)
                p->next[id]=create();
            p=p->next[id];
            p->cnt++;
        }
        p->exict=1;
    }
    int search(string a)
    {
        node *p=root;
        for(int i=0;i<a.length();i++)
        {
            int id=a[i]-'a'+1;
               p=p->next[id];
            if(p==NULL) return 0;
        }
        if(p->exict) return 1;
    }
    int main()
    {
        freopen("asm_talk.in","r",stdin);
        freopen("asm_talk.out","w",stdout);
        root=create();
        scanf("%d",&m);
        string sign;
        for(int opt;m--;)
        {
            scanf("%d",&opt);cin>>sign;
            if(opt==1)
            {
                int k=sign.find('*');
                if(k!=-1)
                {
                    for(int i=0;i<=25;i++)
                    {
                        sign[k]=i+'a';
                        ins(sign);
                    }
                }
                else ins(sign);
            }
            else
            {
                int k=sign.find('*');
                bool flag=false;
                if(k!=-1)
                {
                    for(int i=0;i<=25;i++)
                    {
                        sign[k]=i+'a';
                        if(search(sign))
                        {
                            printf("YES
    ");
                            flag=true;
                            break;
                        }
                    }
                    if(!flag) printf("NO
    ");
                }
                else search(sign)?printf("YES
    "):printf("NO
    ");
            }
        }
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    五个Metro UI 风格的网页设计
    cocos2dx学习资料(转)
    Python性能鸡汤
    7款很棒的 HTML5 视频播放器
    优秀的后台管理界面设计案例分享
    Task的理解(转)
    超棒的20款javascript工具提示条(tooltips)类库(转)
    Xcode 证书生成、设置、应用(转)
    分享17个漂亮的电子商务网站(转)
    强烈免费25款商务logo设计模板(转)
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7348952.html
Copyright © 2020-2023  润新知