推广 高端网站建设,网站同城在线哪里做,谷歌三件套下载,常用网站建设技术是什么文章目录 一、题目[TJOI2010] 阅读理解题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 二、题解基本思路#xff1a;代码 一、题目
[TJOI2010] 阅读理解
题目描述
英语老师留了 N N N 篇阅读理解作业#xff0c;但是每篇英文短文都有很多生词需要查字典代码 一、题目
[TJOI2010] 阅读理解
题目描述
英语老师留了 N N N 篇阅读理解作业但是每篇英文短文都有很多生词需要查字典为了节约时间现在要做个统计算一算某些生词都在哪几篇短文中出现过。
输入格式
第一行为整数 N N N 表示短文篇数其中每篇短文只含空格和小写字母。
按下来的 N N N 行每行描述一篇短文。每行的开头是一个整数 L L L 表示这篇短文由 L L L 个单词组成。接下来是 L L L 个单词单词之间用一个空格分隔。
然后为一个整数 M M M 表示要做几次询问。后面有 M M M 行每行表示一个要统计的生词。
输出格式
对于每个生词输出一行统计其在哪几篇短文中出现过并按从小到大输出短文的序号序号不应有重复序号之间用一个空格隔开注意第一个序号的前面和最后一个序号的后面不应有空格。如果该单词一直没出现过则输出一个空行。
样例 #1
样例输入 #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 % 30\% 30% 的数据 1 ≤ M ≤ 1 0 3 1\le M\le 10^3 1≤M≤103 。
对于 100 % 100\% 100% 的数据 1 ≤ M ≤ 1 0 4 1\le M\le 10^4 1≤M≤104 1 ≤ N ≤ 1 0 3 1\le N\le 10^3 1≤N≤103 。
每篇短文长度含相邻单词之间的空格 ≤ 5 × 1 0 3 \le 5\times 10^3 ≤5×103 字符每个单词长度 ≤ 20 \le 20 ≤20 字符。
每个测试点时限 2 2 2 秒。
感谢钟梓俊添加的一组数据。
二、题解
基本思路
这道题要统计单词在哪几篇短文中出现过序号不能重复且按从小到大输出短文的序号。(1).有没有出现过可以用哈希来判断。(2).序号不能重复且按从小到大输出短文的序号很显然这里可以用STL中的set集合来存放序号。(3).那么该怎么把哈希和set结合起来呢这里我做了一番尝试既然之前写的时候遇到了unordered_mapint,vector 那么一定也可以有unordered_mapint,set,这样就结合在一起了。
代码
#includebits/stdc.h
using namespace std;#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define endl \n
#define int long long
#define repn(i,o,n) for(int io;in;i)
#define rep(i,o,n) for(int io;in;i)void solve(){unordered_mapstring,setint mp;int n,m;cinn;repn(i,1,n){int L;cinL;repn(j,1,L){string str;cinstr;//单词序号插入到该单词对应的序号集合 mp[str].insert(i);}}cinm;while(m--){string str;cinstr;if(mp[str].empty()){coutendl;//不存在要输出空行注意是空行哦bushi空格T_T continue;}bool flagfalse;for(auto i:mp[str]){//输出 if(flag) cout ;couti;flagtrue;}coutendl;}}signed main(){IOS;int T1;//cinT;while(T--){solve();}return 0;
}