开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情
[传智杯 #3 决赛] 课程
题目背景
disangan233 喜欢数数,于是他想让你帮他回答一个问题。
题目描述
传智专修学院提供 两个课程,分别有 个学生报名。报名 的学生的编号为 ,报名 的学生的编号为 ,求有多少个学生同时报名了两个课程。
对于所有数据,,保证每个课程报名的学生编号不会重复。
输入格式
输入共 行。
第 行输入 个正整数 。
第 行输入 个正整数 ,表示报名课程 的学生编号。
第 行输入 个正整数 ,表示报名课程 的学生编号。
学生编号不保证从小到大排序。
输出格式
输出共 行 个整数,表示答案。
样例 #1
样例输入 #1
5 5
1 2 3 4 5
1 3 4 5 6
样例输出 #1
4
提示
样例解释
我们发现, 这 名学生同时报名了两门课程,所以答案是 。
思路分析
众所周知,map是个好东西!
建立映射的思维常用于编程思想,我们要利用map的特性来解决问题!
- 1.考虑到排序无用,只是要计数就行了,那么就使用unordered_map来建立索引
- 2.建立unordered_map<int,int>的索引
- 3.存储课程A的数据
- 直接将值存入
- 4.存储课程B的数据
- 直接将值存入
- 5.创建计数器
- 6.用迭代器遍历统计
- 7.输出
代码展示
#include<iostream>
#include<unordered_map>
using namespace std;
unordered_map<int, int>mp;
int main()
{
int n, m;
cin >> n >> m;
int temp;
for (int i = 1; i <= n; i++) {
cin >> temp;
mp[temp]++;
}
for (int i = 1; i <= m; i++) {
cin >> temp;
mp[temp]++;
}
int res = 0;
for (unordered_map<int, int>::iterator it = mp.begin(); it != mp.end(); it++) {
if (it->second == 2) {
res++;
}
}
cout << res;
return 0;
}
PS:决赛圈的第一题,map简简单单~