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 ...
随机推荐
- Hystrix核心熔断器
在深入研究熔断器之前,我们需要先看一下Hystrix的几个重要的默认配置,这几个配置在HystrixCommandProperties 中 //时间窗(ms) static final Integer ...
- 续~ES6 新语法 (symbol、set集合、 数组对象的filter(),reduce(),weakset(),map()方法)
一.symbol 回顾数据类型: 基本类型(原始类型): String Number Boolean Undifined Null Symbol 引用类型: Objects 1.1 创建symbol ...
- vue Router——进阶篇
vue Router--基础篇 1.导航守卫 正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的 ...
- PHP 简单面向对象 验证码类(静态实例对象调用)
没事写了一个简单的面向对象验证码类,可以直接使用(替换一下字体路径) <?php class authCode { private static $instance = null; #实例对象 ...
- 英语JASPERITE碧玉Jasperite单词
碧玉为一种含矿物质较多的和田玉,其中氧化铁和粘土矿物等含量可达20%以上,不透.微透或半透,颜色多呈暗红色.绿色或杂色. 中文名碧玉 外文名Jasper,Jasperite 别 称玛钠斯玉 类 别按颜 ...
- java web spring异步方法
在项目中,时常会有异步调用的需求 web.xml配置 <servlet> <description>spring mvc servlet</description> ...
- 团队——Alpha2版本发布
这个作业属于哪个课程 课程链接 这个作业要求在哪里 作业要求的链接 团队名称 杨荣模杰和他的佶祥虎 这个作业的目标 发布并说明产品Alpha2版本 一.团队成员的学号姓名列表 学号 姓名 201731 ...
- 10wx.showToast消息提示框 wx.showModal模态对话框
1==>wx.showToast 弹出层 在界面交互中 显示消息提示框 它是一个消失提示框 提示用户成功 或者失败等消息 <button size='mini' bindtap='hanl ...
- DNS分离解析
实验环境: 一台内网(client)1块网卡:一台网关(dns)2块网卡:一台外网1块网卡 DNS服务器开启路由转发 [root@localhost ~]# vi /etc/sysctl.conf n ...
- luoguP1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题意 注:默认\(n\leqslant m\). 所求即为:\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 因为\(i*j=\gcd(i, ...