· 4 years ago · Jul 03, 2021, 05:32 AM
1#include <iostream>
2#include <vector>
3#include <list>
4#include <utility>
5#include <algorithm>
6#include <cctype>
7using namespace std;
8
9typedef pair <string,string> email;
10
11// разделение на имя пользователя и домен
12email split(string in){
13 int loc = in.find('@');
14 email res;
15 res.first = in.substr(0, loc);
16 transform(res.first.begin(), res.first.end(), res.first.begin(),
17 [](unsigned char c){ return std::tolower(c); });
18 res.second = in.substr(loc+1);
19 transform(res.second.begin(), res.second.end(), res.second.begin(),
20 [](unsigned char c){ return std::tolower(c); });
21 return res;
22}
23
24
25email clear(email in){
26 // удаление точек
27 for(string::iterator it=in.first.begin(); it!=in.first.end(); ++it){
28 int dot_pos = in.first.find('.');
29 //cout << dot_pos << "\t" << in.first <<endl;
30 if(dot_pos > 0) in.first.erase(in.first.begin() + dot_pos);
31 }
32 // удаление после первого плюса
33 int plus_pos = in.first.find('+');
34 in.first = in.first.substr(0, plus_pos);
35 //cout << plus_pos << "\t" << in.first << endl;
36 return in;
37}
38
39
40int main(){
41 int count;
42 cin >> count;
43 vector<string> in(count);
44 vector<email> out(count);
45 vector<list<string>> res;
46
47 for(int i = 0; i < count; ++i){
48 string s;
49 cin >> s;
50 in[i] = s;
51 email cur = split(s);
52 if(cur.second == "gmail.com") cur = clear(cur);
53 out[i] = cur;
54 }
55
56 for(int i = 0; i < count; ++i){
57 list<string> r;
58 if(!out[i].first.empty()) r.push_back(in[i]);
59 for(int j = i + 1; j < count; ++j){
60 if(!out[j].first.empty() && out[j] == out[i]) {
61 r.push_back(in[j]);
62 out[j] = {};
63 }
64 }
65 if(!r.empty()) res.push_back(r);
66 }
67
68 cout << res.size() << endl;
69 for(auto a : res){
70 cout << a.size() << " ";
71 for(auto el : a) cout << el << "\t";
72 cout << endl;
73 }
74
75 return 0;
76}