Luogu P3879 【[TJOI2010]阅读理解】
前言:
这个题一直有个疑问,最多一千行,每行五千字$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]阅读理解】的更多相关文章
- 【luogu P3879 [TJOI2010]阅读理解】 题解
题目链接:https://www.luogu.org/problemnew/show/P3879 我先说一句: 我永远都喜欢StellaSTL 这个题,很明显就是 trie树 hash map+vec ...
- P3879 [TJOI2010]阅读理解 题解
P3879 [TJOI2010]阅读理解 题解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输 ...
- 洛谷 P3879 [TJOI2010]阅读理解
P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出 ...
- P3879 [TJOI2010]阅读理解
\(\color{#0066ff}{ 题目描述 }\) 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. \( ...
- Trie树【洛谷P3879】 [TJOI2010]阅读理解
P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出 ...
- Trie树【P3879】 [TJOI2010]阅读理解
Description 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. Input 第一行为整数N,表示短文 ...
- LGOJ3879 TJOI2010 阅读理解
不可否认,\(TJOI\)的这道题确实不难 为本题写博客的唯一原因就是 \(STL\)大法好!!!! Description link 不简述题意了,因为实在是简单 Solution 直接\(map& ...
- HTTPS强制安全策略-HSTS协议阅读理解
https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security [阅读理解式翻译,非严格遵循原 ...
- Codeforces#543 div2 A. Technogoblet of Fire(阅读理解)
题目链接:http://codeforces.com/problemset/problem/1121/A 真·阅读理解 题意就是 有n个人 pi表示他们的强度 si表示他们来自哪个学校 现在Arkad ...
随机推荐
- RVZicsr指令集
Riscv中每个硬件线程(hart)有4096个独立地址空间的状态寄存器.我们可以通过Zicsr指令读写csr寄存器.总共有6条csr读写指令,这些指令之前都在RV32I/RV64I基础指令集里面,在 ...
- 家电制造业中MES系统发挥的作用
人们对MES系统在家电生产领域的应用并不陌生,这是离散型MES应用的一个重要领域. 如空调.冰箱.电视.洗衣机等生产加工中均具有批量制造.多品种小批量.单件生产的等特点,很多企业也是以以订单.合同为核 ...
- 详解Vue的slot新用法
摘要: 理解Vue插槽. 作者:前端小智 原文:vue 2.6 中 slot 的新用法 Fundebug经授权转载,版权归原作者所有. 为了保证的可读性,本文采用意译而非直译. 最近发布不久的Vue ...
- SQL 触发器 新建时删除相同数据
--create alter trigger [dbo].[trigger_sqsj] on [dbo].[lctnrcrd] after INSERT as BEGIN ) id ),dlr,) d ...
- AVX 指令详解 ,还有SSE指令
https://blog.csdn.net/fengbingchun/article/details/23598709 本人从来不复制的,自己看!.
- 防止xss攻击的前端的方法
项目当中在进行安全测试的时候,遇到了xss的攻击,要求前端来做个防御,针对于遇到的xss攻击,做个总结 1.xss---存储型xss的攻击 前端只要在接收到后台数据的时候做个特殊字符的过滤,即可抵制攻 ...
- 201871010105-曹玉中《面向对象程序设计(java)》第十一周学习总结
201871010105-曹玉中<面向对象程序设计(java)>第十一周学习总结 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/ ...
- Java编译期与运行期
编译期:是指把源码交给编译器编译成计算机可以执行的文件的过程.在Java中也就是把Java代码编成class文件的过程.编译期只是做了一些翻译功能,并没有把代码放在内存中运行起来,而只是把代码当成文本 ...
- 万字长文把 VSCode 打造成 C++ 开发利器
https://zhuanlan.zhihu.com/p/96819625 面对大量代码,在开发任务繁重场景下,VSCode 绝对是一把利器.本文虽以 C++为引,但在 python.php.java ...
- zz姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖
姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖 近日,美国艾尔弗·斯隆基金会(The Alfred P. Sloan Foundation)公布了2019年斯隆研究奖(Sloan Research ...