ulvis.paste.net

Paste Search Dynamic
Recent pastes
sort
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long int
  5. #define MAX (ll) 1e18 + 5
  6. #define MIN -MAX
  7. #define maxn 100005
  8. #define F first
  9. #define S second
  10.  
  11. vector <int> l, r;
  12. string s[maxn];
  13. pair <char, pair <int, int> > v[maxn];
  14. pair <int, int> v1[maxn];
  15.  
  16. int main () {
  17.     ios :: sync_with_stdio(false);
  18.     int n;
  19.     scanf("%d", &n);
  20.     for(int k = 0; k < n; k++) {
  21.         cin >> s[k];
  22.         int cnt = 0;
  23.         for(int i = 0; i < s[k].size(); i++) {
  24.             if(s[k][i] == 'a' || s[k][i] == 'e' || s[k][i] == 'i' || s[k][i] == 'o' || s[k][i] == 'u') {
  25.                 cnt++;
  26.             }
  27.         }
  28.         for(int i = s[k].size() - 1; i >= 0; i--) {
  29.             if(s[k][i] == 'a' || s[k][i] == 'e' || s[k][i] == 'i' || s[k][i] == 'o' || s[k][i] == 'u') {
  30.                 v[k].F = s[k][i];
  31.                 v[k].S.F = cnt;
  32.                 v[k].S.S = k;
  33.                 break;
  34.             }
  35.         }
  36.     }
  37.     int ini = 0;
  38.     sort(v, v + n);
  39.     for(int i = 0; i < n; i++) {
  40.         if((i != n - 1) && (v[i].F == v[i + 1].F) && (v[i].S.F == v[i + 1].S.F)) {
  41.             r.push_back(v[i].S.S);
  42.             r.push_back(v[i + 1].S.S);
  43.             i++;
  44.         }
  45.         else {
  46.             v1[ini].F = v[i].S.F;
  47.             v1[ini].S = v[i].S.S;
  48.             ini++;
  49.         }
  50.     }
  51.     sort(v1, v1 + ini);
  52.     for(int i = 0; i < ini - 1; i++) {
  53.         if(v1[i].F == v1[i + 1].F) {
  54.             l.push_back(v1[i].S);
  55.             l.push_back(v1[i + 1].S);
  56.             i++;
  57.         }
  58.     }
  59.     if(r.size() - l.size() > 2) {
  60.         int x = (l.size() + r.size()) / 4;
  61.         x *= 2;
  62.         int y = x;
  63.         while(l.size() < x) {
  64.                 l.push_back(r[y]);
  65.                 y++;
  66.                 }
  67.         }
  68.     int sz = min(l.size(), r.size());
  69.     printf("%d\n", sz / 2);
  70.     for(int i = 0; i < sz; i++) {
  71.         cout << s[l[i]] << ' ' << s[r[i]] << endl;
  72.     }
  73.    
  74.     return 0;
  75. }
Parsed in 0.014 seconds