P3879 [TJOI2010]阅读理解
作者:互联网
[TJOI2010]阅读理解
题目描述
英语老师留了 $N$ 篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过。输入输出格式
输入格式
第一行为整数 $N$ ,表示短文篇数,其中每篇短文只含空格和小写字母。 按下来的 $N$ 行,每行描述一篇短文。每行的开头是一个整数 $L$ ,表示这篇短文由 $L$ 个单词组成。接下来是 $L$ 个单词,单词之间用一个空格分隔。 然后为一个整数 $M$ ,表示要做几次询问。后面有 $M$ 行,每行表示一个要统计的生词。
输出格式
对于每个生词输出一行,统计其在哪几篇短文中出现过,并按从小到大输出短文的序号,序号不应有重复,序号之间用一个空格隔开(注意第一个序号的前面和最后一个序号的后面不应有空格)。如果该单词一直没出现过,则输出一个空行。
输入输出样例
输入样例 #1
3
9 you are a good boy ha ha o yeah
13 o my god you like bleach naruto one piece and so do i
11 but i do not think you will get all the points
5
you
i
o
all
naruto
输出样例 #1
1 2 3
2 3
1 2
3
2
说明
对于 $30\%$ 的数据, $1\le M\le 10^3$ 。 对于 $100\%$ 的数据,$1\le M\le 10^4$,$1\le N\le 10^3$ 。 每篇短文长度(含相邻单词之间的空格)$\le 5\times 10^3$ 字符,每个单词长度 $\le 20$ 字符。 每个测试点时限 $2$ 秒。 感谢@钟梓俊添加的一组数据。#include <bits/stdc++.h> #include <ext/pb_ds/hash_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; int n; int l; const int N = 1e3 + 10; gp_hash_table <string, bitset > Ma; string s; int m; vector ans; int main() { cin >> n; for (int i = 1; i <= n; ++i) { cin >> l; while (l--) { cin >> s; Ma[s][i] = 1; } } cin >> m; while (m--) { cin >> s; ans.clear(); for (int i = 1; i <= n; i++) { if (Ma[s][i]) { cout << i << " "; } } cout << endl; } return 0; }
标签:10,短文,le,int,理解,P3879,生词,TJOI2010,单词 来源: https://www.cnblogs.com/lyc-lb-blogs/p/15379432.html