zoukankan      html  css  js  c++  java
  • 洛谷 P3879 [TJOI2010]阅读理解(trie树)

    传送门


    解题思路

    普通的trie貌似会MLE

    但是我们可以偷偷数组少开个零,就A了

    想知道为什么?

    别问,问就是数据水。

    其实正解map bitset等等……

    看来以后要学学bitset……

    AC代码

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<iomanip>
     5 #include<cmath>
     6 #include<set>
     7 using namespace std;
     8 const int maxn=500005;
     9 int n,m,nn,cnt=1,ch[maxn][26];
    10 set<int> vis[maxn];
    11 string s;
    12 void insert(int id){
    13     int len=s.length(),now=1;
    14     for(int i=0;i<len;i++){
    15         if(!ch[now][s[i]-'a']) ch[now][s[i]-'a']=++cnt; 
    16         now=ch[now][s[i]-'a'];
    17     }
    18     vis[now].insert(id);
    19 }
    20 void query(){
    21     int len=s.length(),now=1;
    22     for(int i=0;i<len;i++){
    23         if(!ch[now][s[i]-'a']){
    24             cout<<endl;
    25             return;
    26         }
    27         now=ch[now][s[i]-'a'];
    28     }
    29     if(vis[now].empty()) cout<<endl;
    30     else{
    31         for(set<int>::iterator i=vis[now].begin();i!=vis[now].end();i++) cout<<(*i)<<" ";
    32         cout<<endl;
    33     }
    34 }
    35 int main(){
    36     cin>>n;
    37     for(int i=1;i<=n;i++){
    38         cin>>nn;
    39         for(int j=1;j<=nn;j++){
    40             cin>>s;
    41             insert(i);
    42         }
    43     }
    44     cin>>m;
    45     for(int i=1;i<=m;i++){
    46         cin>>s;
    47         query();
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    Java基础知识:正则表达式
    NodeJs 中 将表单数据转发到后台
    单片机的远程升级
    一些开源协议
    物联网的一些例子
    python一些开源特色库
    qt练习
    网页编程学习笔记
    PCB相关
    工业控制系统
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/14258583.html
Copyright © 2011-2022 走看看