上网统计


在一个网络系统中有 N 个用户、 M 次上网记录。每个用户可以自己注册一个用户名,每个用户名只包含小写字母且长度小于 1000 的字符串,每次上网日志里都会有记录,现在请统计每个用户每次浏览了多少个网页。注意,有可能有用户没有访问记录。

输入

第 1 行包含两个正整数 N (1 ≤ N ≤ 1000) 和 M (1 ≤ M ≤ 5000)。

第 2 ~ M+1 行,每行包含 2 个字符串,分别表示用户名和浏览的网页名。

输出

共 x 行,x 表示有访问记录的用户数量,

每行的第一个字符串时用户名,接下来的若干字符串是这个用户依次浏览的网页名(之间用一个空格隔开)。

按照用户名出现的次序排序输出。

样例

1
2
3
4
5
6
7
8
5 7
goodstudyer bookshopa
likespacea spaceweb
goodstudyer bookshopb
likespaceb spaceweb
likespacec spaceweb
likespacea juiceshop
gameplayer gameweb
1
2
3
4
5
goodstudyer bookshopa bookshopb
likespacea spaceweb juiceshop
likespaceb spaceweb
likespacec spaceweb
gameplayer gameweb

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<iostream>
#include<string>
#include<vector>
#include<unordered_map>
using namespace std;

int cnt;//当前用户访问记录所在的行数
int n;//用户的个数
int recordNum;//上网记录的条数
unordered_map<string, int> mp;//用于记录vector在第几行的信息(unordered_map满足按用户名出现的次序进行输出)

int main() {
cin >> n >> recordNum;
vector<vector<string>> vec(n, vector<string>{});//用二维数组存储数据
//1.数据处理 及存储
for (int i = 0; i < recordNum; ++i) {
string username, siteinfo;
cin >> username >> siteinfo;
if (mp.count(username) == 0) {//如果在map集中的没有username该用户(该用户第一次访问)
mp[username] = cnt;//当前用户访问记录所在的vec二维数组中的行数
vec[cnt].push_back(username);
vec[cnt].push_back(siteinfo);
cnt++;
} else {//该用户已有访问记录 则直接加入原有访问记录的vecotr中
vec[mp[username]].push_back(siteinfo);
}
}
//2.输出结果
for (int i = 0; i < n; ++i) {
for (int j = 0; j < vec[i].size(); ++j) {
if (j) cout << " ";
cout << vec[i][j];
}
cout << endl;
}
return 0;
}