zoukankan      html  css  js  c++  java
  • 于是他错误的点名开始了(trie树)

    题目背景

    XS中学化学竞赛组教练是一个酷爱炉石的人。

    他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛CON900)。

    题目描述

    这之后校长任命你为特派探员,每天记录他的点名。校长会提供化学竞赛学生的人数和名单,而你需要告诉校长他有没有点错名。(为什么不直接不让他玩炉石。)

    输入输出格式

    输入格式:

    第一行一个整数 n,表示班上人数。接下来 n 行,每行一个字符串表示其名字(互不相同,且只含小写字母,长度不超过 50)。第 n+2 行一个整数 m,表示教练报的名字。接下来 m 行,每行一个字符串表示教练报的名字(只含小写字母,且长度不超过 50)。

    输出格式:

    对于每个教练报的名字,输出一行。如果该名字正确且是第一次出现,输出“OK”,如果该名字错误,输出“WRONG”,如果该名字正确但不是第一次出现,输出“REPEAT”。(均不加引号)

    思路:

    据说hash可以过,但我还是乖乖地写了trie树

    我们将所有人的名字建到一颗trie树上

    然后跑匹配即可

    如果没有trie上的结点没有后继了还没有匹配完,则点错了

    如果点到的名正好是结尾,则点名正确,同时打标记,表示已经点过名了

    如果访问到的终点已经有标记,则重复了

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define rii register int i
    using namespace std;
    struct trie{
        int nxt[30];
    }x[10000005];
    int cnt;
    string s;
    int fi[10000005],n,m,pnt;
    void add(int wz,int head)
    {
        if(head==s.length()-1)
        {
            return;
        }
        if(x[wz].nxt[s[head+1]-'a']==0)
        {
            cnt++;
            x[wz].nxt[s[head+1]-'a']=cnt;
            add(cnt,head+1);
        }
        else
        {
            add(x[wz].nxt[s[head+1]-'a'],head+1);
        }
    }
    int check(int wz,int bh)
    {
        if(bh==s.length()-1)
        {
            fi[wz]++;
            return fi[wz];
        }
        if(x[wz].nxt[s[bh+1]-'a']==0)
        {
            return 0;
        }
        return check(x[wz].nxt[s[bh+1]-'a'],bh+1);
    }
    int main()
    {
    //    freopen("1.in","r",stdin);
    //    freopen("1.out","w",stdout);
        scanf("%d",&n);
        for(rii=1;i<=n;i++)
        {
            pnt++;
            cin>>s;
            add(0,-1);
        }
        scanf("%d",&m);
        for(rii=1;i<=m;i++)
        {
            cin>>s;
            int ltt=check(0,-1);
            if(ltt==1)
            {
                puts("OK");
            }
            if(ltt>=2)
            {
                puts("REPEAT");
            }
            if(ltt==0)
            {
                puts("WRONG");
            }
        }
    }
  • 相关阅读:
    部署 AppGlobalResources 到 SharePoint 2010
    还原一个已删除的网站集
    使用仪表板设计器配置级联筛选器 (SharePoint Server 2010 SP1)
    File or arguments not valid for site template
    Pex and Moles Documentation
    Content Query Webpart匿名访问
    Running Moles using NUnit Console from Visual Studio
    Calling a WCF Service using jQuery in SharePoint the correct way
    Updating Content Types and Site Columns That Were Deployed as a Feature
    asp.net中判断传过来的字符串不为空的代码
  • 原文地址:https://www.cnblogs.com/ztz11/p/9807420.html
Copyright © 2011-2022 走看看