• P3879 [TJOI2010]阅读理解


    Link

    题目描述

    英语老师留了 (N) 篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过。


    tire树的水题了。

    我们先把每个单词依次存入一个 (tire) 树中。

    然后对 (tire) 中每个节点都开个 (vector) 表示到 (p) 这个节点的字符串出现在那个位置。

    mdzz,居然要判重,不然你就会像我一样 全 (WA) 了好几回。

    code

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    using namespace std;
    char s[30];
    int n,num,m,tot = 1,tr[200010][27];
    vector<int> v[200010];
    inline int read()
    {
        int s = 0,w = 1; char ch = getchar();
        while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
        while(ch >= '0' && ch <= '9'){s = s * 10 + ch - '0'; ch = getchar();}
        return s * w;
    }
    int insert(int now,char *s)//建tire树
    {
        int len = strlen(s+1), p = 1;
        for(int i = 1; i <= len; i++)
        {
            int c = s[i]-'a';
            if(!tr[p][c]) tr[p][c] = ++tot;
            p = tr[p][c];
        }
        if(v[p].empty()) v[p].push_back(now);//判重
        else
        {
        	int siz = v[p].size();
        	if(v[p][siz-1] != now) v[p].push_back(now);
        }
    }
    int query(char *s)
    {
        int len = strlen(s+1), p = 1;
        int flag = 0;
        for(int i = 1; i <= len; i++)
        {
            int c = s[i]-'a';
            if(!tr[p][c]) {flag = 1; break;}
            p = tr[p][c];
        }
        if(!flag)
        {
        	int siz = v[p].size();
        	for(int i = 0; i < v[p].size(); i++) printf("%d ",v[p][i]);
        }
        printf("
    ");
    }
    int main()
    {
        n = read();
        for(int i = 1; i <= n; i++)
        {
            num = read();
            for(int j = 1; j <= num; j++)
            {
                scanf("%s",s+1);
                insert(i,s);
            }
        }
        m = read();
        for(int i = 1; i <= m; i++)
        {
            scanf("%s",s+1);
            query(s);
        }
        return 0;
    }
    
  • 相关阅读:
    几何画板绘制三棱锥的教程
    MathType给公式底部加箭头的教程
    几何画板有哪些快捷键可以用
    公式编辑器调整公式边框粗细的教程
    wdcp安装
    搭建git for windows服务器(100%可以成功)
    百度echarts
    简单的js菜单
    真正的让iframe自适应高度 兼容多种浏览器随着窗口大小改变
    Hadoop学习笔记(一)从官网下载安装包
  • 原文地址:https://www.cnblogs.com/genshy/p/13812653.html
Copyright © 2020-2023  润新知