前言:

这个题一直有个疑问,最多一千行,每行五千字$1000\times5000=5e6$

$5e6\times26\times4\div1024\div1024\approx496Mb>125Mb$

尽管清楚实际空间需求不能到达$5e6$,如何计算直接对文章建$Trie$事实上所需的最大空间呢,本人对此并不清楚,也希望有大佬能为我解决一下这个问题(至于开$5e6\times26$通过的大佬,我想我这种凡人还达不到这个境界)

那么,就请我们权且认为直接对文章建$Trie$在空间上是不被允许的,至少是不够保险的

正文:

于是提供一种同样是基于$Trie$的方法——对询问建$Trie$

$10000\times20\times26\times4\div1024\div1024\approx20Mb$

占空间最多的$Trie$解决了,空间问题就不必担心了

下面我们考虑对询问建$Trie$下这个问题的解决

(这不是$Trie$的板子题吗,有什么可考虑的)

好吧,代码实现细节及一些注意事项,见代码了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=5e6,maxq=2e5+;
int cnt,a[maxq][],n,m;
vector<string>v[];
vector<int>ans[],val[maxq];
string tmp;
int idx(char c)
{
return c-'a';
}
void insert(int x)
{
cin>>tmp;
int len=tmp.length(),now=;
for(int i=;i<len;i++)
{
int c=idx(tmp[i]);
now=a[now][c]?a[now][c]:a[now][c]=++cnt;
}
val[now].push_back(x);
/*因为可能有相同的查询,这里的简单地用一个
整形标记就不太合适了,我选择了用vector记录
这个节点作为所有询问的标记*/
}
void check(int x,int y)
{
int len=v[x][y].length(),now=;
for(int i=;i<len;i++)
{
int c=idx(v[x][y][i]);
if(!a[now][c])
return;
//这个单词一定没有被查询过,直接退回
now=a[now][c];
}
for(int i=;i<val[now].size();i++)
ans[val[now][i]].push_back(x);
//同理在所有询问中保存这个单词曾经出现的文章
}
int main()
{
scanf("%d",&n);
for(int i=,num;i<=n;i++)
{
scanf("%d",&num);
for(int j=;j<=num;j++)
{
cin>>tmp;
v[i].push_back(tmp);
//采用了vector来存储原文
}
}
scanf("%d",&m);
for(int i=;i<=m;i++)
insert(i);
for(int i=;i<=n;i++)
for(int j=;j<v[i].size();j++)
check(i,j);
for(int i=;i<=m;i++)
{
vector<int>::iterator pos=unique(ans[i].begin(),ans[i].end());
for(vector<int>::iterator it=ans[i].begin();it!=pos;it++)
printf("%d ",*it);
printf("\n");
}
/*这里的输出,因为一篇文章里可能多次出现同一单词,
记得去重,一开始我用的unique,再输出vector中的
所有元素。但是unique去重时其实并没有删除这些元素
在这里也被坑了,所以改用迭代器*/
return ;
}

Luogu P3879 【[TJOI2010]阅读理解】的更多相关文章

  1. 【luogu P3879 [TJOI2010]阅读理解】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3879 我先说一句: 我永远都喜欢StellaSTL 这个题,很明显就是 trie树 hash map+vec ...

  2. P3879 [TJOI2010]阅读理解 题解

    P3879 [TJOI2010]阅读理解 题解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输 ...

  3. 洛谷 P3879 [TJOI2010]阅读理解

    P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出 ...

  4. P3879 [TJOI2010]阅读理解

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

  5. Trie树【洛谷P3879】 [TJOI2010]阅读理解

    P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出 ...

  6. Trie树【P3879】 [TJOI2010]阅读理解

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

  7. LGOJ3879 TJOI2010 阅读理解

    不可否认,\(TJOI\)的这道题确实不难 为本题写博客的唯一原因就是 \(STL\)大法好!!!! Description link 不简述题意了,因为实在是简单 Solution 直接\(map& ...

  8. HTTPS强制安全策略-HSTS协议阅读理解

    https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security [阅读理解式翻译,非严格遵循原 ...

  9. Codeforces#543 div2 A. Technogoblet of Fire(阅读理解)

    题目链接:http://codeforces.com/problemset/problem/1121/A 真·阅读理解 题意就是 有n个人 pi表示他们的强度 si表示他们来自哪个学校 现在Arkad ...

随机推荐

  1. memory一致性模型

    https://homes.cs.washington.edu/~bornholt/post/memory-models.html https://www.cs.cmu.edu/afs/cs/acad ...

  2. SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错

    SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ...

  3. Git内部原理浅析

    Git独特之处 Git是一个分布式版本控制系统,首先分布式意味着Git不仅仅在服务端有远程仓库,同时会在本地也保留一个完整的本地仓库(.git/文件夹),这种分布式让Git拥有下面几个特点: 1.直接 ...

  4. vue学习指南:第六篇(详细) - Vue的组件 component

    1. 什么是组件?有两种解释 1. 第一种解释: 什么是组件? 1. 组件是 vue 中的一个可复用的实例,所以new Vue() 是vue中最大的那个组件(根组件),有名字,使用的时候以单标签或双标 ...

  5. php中mysqli_error($conn)的用法

    注意:用函数判断sql语句是否有错需要把这个函数写在mysqli_query("$conn连接语句","$sql语句")后面才能进行检测. 返回值:返回最近调用 ...

  6. windows elasticsearch使用ik分词器插件后启动报错java.security.AccessControlException: access denied ("java.io.FilePermission" "D:...........\plugins\ik-analyzer\config\IKAnalyzer.cfg.xml" "read")

    删除es安装文件夹中空格,遂解决......(哭

  7. 获取List<object>中对象的属性值

    List<object> ls = new List<object>(); ls.Add(,name="sqm"}); ls.Add(,name=" ...

  8. 【分布式搜索引擎】Elasticsearch之开启Elasticsearch的用户名密码验证

    一.首先在elasticsearch配置文件中开启x-pack验证, 修改config目录下面的elasticsearch.yml文件,在里面添加如下内容,并重启 xpack.security.ena ...

  9. kolla部署openstack allinone,报错 ImportError: cannot import name decorate

    使用 kolla-ansible 部署 opnenstack:stein,最后无法导入变量脚本,报错信息如下: [root@kolla ~]# . /etc/kolla/admin-openrc.sh ...

  10. 解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”

    centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件. 安装 ...