Advertisement
Guest User

Untitled

a guest
Oct 17th, 2015
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #pragma comment (linker,"/STACK:256000000")
  3. #include <iostream>
  4. #include <stdio.h>
  5. #include <algorithm>
  6. #include <set>
  7. #include <map>
  8. #include <queue>
  9. #include <stack>
  10. #include <deque>
  11. #include <vector>
  12. #include <cassert>
  13. #include <string>
  14. using namespace std;
  15.  
  16. #define INF 1000000000
  17. #define lint long long
  18. #define pb push_back
  19. #define MOD 1000000007
  20. #define mp make_pair
  21.  
  22. string s[20005];
  23. pair <string, int> a[20005];
  24. vector <string> gr[20005];
  25.  
  26. char islow(char c) {
  27.     return c >= 'a' && c <= 'z';
  28. }
  29. int main() {
  30.     int n;
  31.     scanf("%d", &n);
  32.     for (int i = 0; i < n; ++i) {
  33.         cin >> s[i];
  34.         int at = 0;
  35.         string dom;
  36.         string log;
  37.         for (int j = 0; j < s[i].size(); ++j) {
  38.             if (at) {
  39.                 if (s[i][j] == '.' || islow(s[i][j]))
  40.                     dom += s[i][j];
  41.                 else dom += char(s[i][j] - 'A' + 'a');
  42.             }
  43.             if (s[i][j] == '@')
  44.                 at = 1;
  45.         }
  46.  
  47.         if (dom == "bmail.com") {
  48.             for (int j = 0; j < s[i].size(); ++j) {
  49.                 if (s[i][j] == '+')
  50.                     break;
  51.                 if (s[i][j] == '.')
  52.                     continue;
  53.                 if (s[i][j] == '@')
  54.                     break;
  55.                 if (islow(s[i][j]))
  56.                     log += s[i][j];
  57.                 else log += char(s[i][j] - 'A' + 'a');
  58.             }
  59.         }
  60.         else {
  61.             for (int j = 0; j < s[i].size(); ++j) {
  62.                 if (s[i][j] == '@')
  63.                     break;
  64.                 if (islow(s[i][j]))
  65.                     log += s[i][j];
  66.                 else log += char(s[i][j] - 'A' + 'a');
  67.             }
  68.         }
  69.  
  70.         a[i] = mp(log + dom, i);
  71.     }
  72.  
  73.     sort(a, a + n);
  74.     int g = 1;
  75.     gr[0].pb(s[a[0].second]);
  76.     for (int i = 1; i < n; ++i) {
  77.         if (a[i].first != a[i - 1].first) {
  78.             gr[g++].pb(s[a[i].second]);
  79.         }
  80.         else {
  81.             gr[g - 1].pb(s[a[i].second]);
  82.         }
  83.     }
  84.  
  85.     printf("%d\n", g);
  86.     for (int i = 0; i < g; ++i) {
  87.         cout << gr[i].size() << " ";
  88.         for (int j = 0; j < gr[i].size(); ++j) {
  89.             cout << gr[i][j] << " ";
  90.         }
  91.         cout << "\n";
  92.     }
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement