Problem p00321 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>
using namespace std;

int main() {
  int n, m, ans = 0;
  string t;
  cin >> n >> m;
  vector<int> a(n);
  vector<string> s(0);
  vector<vector<string>> u(n, vector<string>(0));
  for (int i = 0; i < n; i++) {
    cin >> a.at(i);
    for (int j = 0; j < a.at(i); j++) {
      int y = 0;
      cin >> t;
      u.at(i).push_back(t);
      for (int k = 0; k < s.size(); k++) {
        if (s.at(k) == t) {
          y = 1;
          break;
        }
      }
      if (y == 0)
        s.push_back(t);
    }
    sort(u.at(i).begin(), u.at(i).end());
  }
  sort(s.begin(), s.end());
  vector<vector<pair<pair<string, string>, int>>> h(
      s.size(), vector<pair<pair<string, string>, int>>(s.size()));
  for (int i = 0; i < s.size() - 1; i++) {
    for (int j = i + 1; j < s.size(); j++) {
      pair<pair<string, string>, int> v;
      v.first.first = s.at(i);
      v.first.second = s.at(j);
      v.second = 0;
      h.at(i).at(j) = v;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < a.at(i) - 1; j++) {
      for (int k = j + 1; k < a.at(i); k++) {
        for (int e = 0; e < s.size() - 1; e++) {
          for (int ii = e + 1; ii < s.size(); ii++) {
            if (h.at(e).at(ii).first.first == u.at(i).at(j) &&
                h.at(e).at(ii).first.second == u.at(i).at(k))
              h.at(e).at(ii).second++;
          }
        }
      }
    }
  }
  for (int i = 0; i < s.size() - 1; i++) {
    for (int j = i + 1; j < s.size(); j++) {
      if (h.at(i).at(j).second >= m)
        ans++;
    }
  }
  cout << ans << endl;
  for (int i = 0; i < s.size() - 1; i++) {
    for (int j = i + 1; j < s.size(); j++) {
      if (h.at(i).at(j).second >= m)
        cout << h.at(i).at(j).first.first << " " << h.at(i).at(j).first.second
             << endl;
    }
  }
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;

int main() {
  int n, m, ans = 0;
  string t;
  cin >> n >> m;
  vector<int> a(n);
  vector<string> s(0);
  vector<vector<string>> u(n, vector<string>(0));
  for (int i = 0; i < n; i++) {
    cin >> a.at(i);
    for (int j = 0; j < a.at(i); j++) {
      int y = 0;
      cin >> t;
      u.at(i).push_back(t);
      for (int k = 0; k < s.size(); k++) {
        if (s.at(k) == t) {
          y = 1;
          break;
        }
      }
      if (y == 0)
        s.push_back(t);
    }
    sort(u.at(i).begin(), u.at(i).end());
  }
  sort(s.begin(), s.end());
  vector<vector<pair<pair<string, string>, int>>> h(
      s.size(), vector<pair<pair<string, string>, int>>(s.size()));
  for (int i = 0; i < s.size() - 1; i++) {
    for (int j = i + 1; j < s.size(); j++) {
      pair<pair<string, string>, int> v;
      v.first.first = s.at(i);
      v.first.second = s.at(j);
      v.second = 0;
      h.at(i).at(j) = v;
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < a.at(i) - 1; j++) {
      for (int k = j + 1; k < a.at(i); k++) {
        for (int e = 0; e < s.size() - 1; e++) {
          if (h.at(e).at(s.size() - 1).first.first == u.at(i).at(j)) {
            for (int ii = e + 1; ii < s.size(); ii++) {
              if (h.at(e).at(ii).first.first == u.at(i).at(j) &&
                  h.at(e).at(ii).first.second == u.at(i).at(k))
                h.at(e).at(ii).second++;
            }
          }
        }
      }
    }
  }
  for (int i = 0; i < s.size() - 1; i++) {
    for (int j = i + 1; j < s.size(); j++) {
      if (h.at(i).at(j).second >= m)
        ans++;
    }
  }
  cout << ans << endl;
  for (int i = 0; i < s.size() - 1; i++) {
    for (int j = i + 1; j < s.size(); j++) {
      if (h.at(i).at(j).second >= m)
        cout << h.at(i).at(j).first.first << " " << h.at(i).at(j).first.second
             << endl;
    }
  }
}