zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    svn安装教程
    六、数组类的创建
    五、顺序存储线性表分析
    四、StaticList 和 DynamicList
    三、顺序存储结构的抽象实现
    二、线性表的顺序存储结构
    一、线性表的本质和操作
    专题五:局部变量、全局变量global、导入模块变量
    专题四:文件基础知识、字符编码
    专题3-2:列表基础知识:二维list排序、获取下标和处理txt文本实例
  • 原文地址:https://www.cnblogs.com/genshy/p/13812653.html
Copyright © 2011-2022 走看看