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

P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出格式 输入格式: 第一行为整数N,表示短文篇数,其中每篇短文只含空格和小写字母. 按下来的N行,每行描述一篇短文.每行的开头是一个整数L,表示这篇短文由L个单词组成.接下来是L个单词,单词之间用一个空格分隔. 然后为一个整数M,表示要做几次询问.后面有M行,每行表示一个要统计的生词. 输出格式: 对…
P3879 [TJOI2010]阅读理解 题解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出格式 输入格式: 第一行为整数N,表示短文篇数,其中每篇短文只含空格和小写字母. 按下来的N行,每行描述一篇短文.每行的开头是一个整数L,表示这篇短文由L个单词组成.接下来是L个单词,单词之间用一个空格分隔. 然后为一个整数M,表示要做几次询问.后面有M行,每行表示一个要统计的生词. 输出格式…
\(\color{#0066ff}{ 题目描述 }\) 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. \(\color{#0066ff}{输入格式}\) 第一行为整数N,表示短文篇数,其中每篇短文只含空格和小写字母. 按下来的N行,每行描述一篇短文.每行的开头是一个整数L,表示这篇短文由L个单词组成.接下来是L个单词,单词之间用一个空格分隔. 然后为一个整数M,表示要做几次询问.后面有M行,每行表示一个…
题目链接:https://www.luogu.org/problemnew/show/P3879 我先说一句: 我永远都喜欢StellaSTL 这个题,很明显就是 trie树 hash map+vector 思路: 直接用map<string,vecotr > 代替这题里的trie树,注意开map的时候后面两个> >之间要有一个空格. 用vector记录每个单词出现的句子位置,每遇到一个就把该单词所出现的句子的编号压入对应的vector里. 于是乎= =这就是最暴力的想法. 接下来…
P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出格式 输入格式: 第一行为整数N,表示短文篇数,其中每篇短文只含空格和小写字母. 按下来的N行,每行描述一篇短文.每行的开头是一个整数L,表示这篇短文由L个单词组成.接下来是L个单词,单词之间用一个空格分隔. 然后为一个整数M,表示要做几次询问.后面有M行,每行表示一个要统计的生词. 输出格式: 对…
Description 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. Input 第一行为整数N,表示短文篇数,其中每篇短文只含空格和小写字母. 按下来的N行,每行描述一篇短文.每行的开头是一个整数L,表示这篇短文由L个单词组成.接下来是L个单词,单词之间用一个空格分隔. 然后为一个整数M,表示要做几次询问.后面有M行,每行表示一个要统计的生词. Output 对于每个生词输出一行,统计其在哪几篇短文中…
前言: 这个题一直有个疑问,最多一千行,每行五千字$1000\times5000=5e6$ $5e6\times26\times4\div1024\div1024\approx496Mb>125Mb$ 尽管清楚实际空间需求不能到达$5e6$,如何计算直接对文章建$Trie$事实上所需的最大空间呢,本人对此并不清楚,也希望有大佬能为我解决一下这个问题(至于开$5e6\times26$通过的大佬,我想我这种凡人还达不到这个境界) 那么,就请我们权且认为直接对文章建$Trie$在空间上是不被允许的,至…
不可否认,\(TJOI\)的这道题确实不难 为本题写博客的唯一原因就是 \(STL\)大法好!!!! Description link 不简述题意了,因为实在是简单 Solution 直接\(map<string,vector<int> > mp\),后面的\(vector\)统计答案就完事了 码量小,思维难度小,何乐不为? Code #include <bits/stdc++.h> using namespace std; #define int long long…
关于\(Trie\)树的详细介绍,还请移步这篇深度好文 基本操作 插入 void insert() { int p=0; int len=strlen(tmp+1); for(int i=1;i<=len;i++) { int qwq=tmp[i]-'0'; if(!trie[p][qwq]) trie[p][qwq]=++tot; p=trie[p][qwq]; } } 注意,其中\(tot=0\),我习惯\(p\)初始值也为\(0\).\(tot\)与\(p\)初值应保持一致. 检索操作非常…
Trie树入门 貌似很多人会认为\(Trie\)是字符串类型,但是这是数据结构!!!. 详情见度娘 下面开始进入正题. PS:本文章所有代码未经编译,有错误还请大家指出. 引入 先来看一个问题 ​ 给定一本字典中的\(n\)个单词,还有\(m\)个询问.每次询问询问一个单词是否出现在这\(n\)个单词中. 暴力 最简单的就是暴力做法啦,我们直接枚举去判别对应位置,还可以再加点优化. 即:长度不同,肯定不是同一个单词. for(int l;m;m--) { bool flg=false; scan…