洛谷——P3879 [TJOI2010] 阅读理解(STL:hash+set,c++)


一、题目

[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 1M103

对于 100 % 100\% 100% 的数据, 1 ≤ M ≤ 1 0 4 1\le M\le 10^4 1M104 1 ≤ N ≤ 1 0 3 1\le N\le 10^3 1N103

每篇短文长度(含相邻单词之间的空格) ≤ 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_map<int,vector> ,那么一定也可以有unordered_map<int,set>,这样就结合在一起了。

代码

#include<bits/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 i=o;i<=n;i++)
#define rep(i,o,n) for(int i=o;i<n;i++)

void solve(){
   
	unordered_map<string,set<int>> mp;
	int n,m;
	cin>>n;
	repn(i,1,n){
   
		int L;
		cin>>L;
		repn(j,1,L){
   
			string str;
			cin>>str;
			//单词序号插入到该单词对应的序号集合 
			mp[str].insert(i);
		}
	}
	cin>>m;
	while(m--){
   
		string str;
		cin>>str;
		if(mp[str].empty()){
   
			cout<<endl;//不存在要输出空行,注意是空行哦!(bushi空格T_T) 
			continue;
		}
		bool flag=false;
		for(auto i:mp[str]){
   //输出 
		  if(flag) cout<<" ";
		  cout<<i;
		  flag=true;
     	}
		cout<<endl;
	}
	
}

signed main(){
   
	IOS;
	int T=1;
	//cin>>T;
	while(T--){
   
		solve();
	}
	return 0;
}

相关推荐

  1. ——P3879 [TJOI2010] 阅读理解(STL:hash+set,c++)

    2023-12-31 21:54:03       49 阅读
  2. P3870 [TJOI2009] 开关 题解 线段树

    2023-12-31 21:54:03       29 阅读
  3. P5051 [COCI2017-2018#7] Timovi

    2023-12-31 21:54:03       46 阅读
  4. P6866 [COCI2019-2020#5] Emacs

    2023-12-31 21:54:03       39 阅读
  5. P3512 [POI2010] PIL-Pilots

    2023-12-31 21:54:03       33 阅读
  6. P1541 [NOIP2010 提高组] 乌龟棋

    2023-12-31 21:54:03       41 阅读
  7. P1179 [NOIP2010 普及组] 数字统计

    2023-12-31 21:54:03       35 阅读
  8. P6974 [NEERC2015] Adjustment Office 题解

    2023-12-31 21:54:03       66 阅读
  9. P5469 [NOI2019] 机器人 黑题题解

    2023-12-31 21:54:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-31 21:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-31 21:54:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-31 21:54:03       82 阅读
  4. Python语言-面向对象

    2023-12-31 21:54:03       91 阅读

热门阅读

  1. nacos2.3.0配置中心问题处理

    2023-12-31 21:54:03       115 阅读
  2. UnityShader(二)Shader基础

    2023-12-31 21:54:03       46 阅读
  3. [leetcode] 四数之和 M

    2023-12-31 21:54:03       50 阅读
  4. [蓝桥杯 2018省赛]回家路费

    2023-12-31 21:54:03       58 阅读
  5. henauOJ 1084: 超简单的矩阵乘法

    2023-12-31 21:54:03       62 阅读
  6. vue黑马案例之小黑记事本组件版(含素材)

    2023-12-31 21:54:03       62 阅读
  7. 单值二叉树

    2023-12-31 21:54:03       68 阅读
  8. 认知负荷决定了微服务或单体

    2023-12-31 21:54:03       64 阅读