Advertisement
Guest User

I love clean code

a guest
Dec 22nd, 2024
461
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.33 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4. #define MOD 998244353
  5. #define MOD2 1000000007
  6. #define vt vector
  7. #define endl '\n'
  8. #define pb push_back
  9. #define pf push_front
  10. #define all(x) x.begin(),x.end()
  11. #define sz(x) (int)((x).size())
  12. #define uset unordered_set
  13. #define umap unordered_map
  14. #define mset multiset
  15. #define fi first
  16. #define se second
  17. #define rep(i,a,b) for(int i=a;i<b;i++)
  18. #define rrep(i,a,b) for(int i=a;i>=b;i--)
  19. #define each(i,a) for(auto &i:a)
  20. struct pii {
  21.     int x, y;
  22.     bool operator<(const pii &a) const { return x == a.x ? y < a.y : x < a.x; }
  23.     bool operator>(const pii &a) const { return x == a.x ? y > a.y : x > a.x; }
  24.     bool operator==(const pii &a) const { return x == a.x && y == a.y; }
  25.     bool operator!=(const pii &a) const { return x != a.x || y != a.y; }
  26.     pii operator+(const pii &a) const { return {x+a.x, y+a.y}; }
  27.     pii operator-(const pii &a) const { return {x-a.x, y-a.y}; }
  28.     pii operator*(const int &a) const { return {x*a, y*a}; }
  29.     pii operator/(const int &a) const { return {x/a, y/a}; }
  30. };
  31. struct pll {
  32.     ll x, y;
  33.     bool operator<(const pll &a) const { return x == a.x ? y < a.y : x < a.x; }
  34.     bool operator>(const pll &a) const { return x == a.x ? y > a.y : x > a.x; }
  35.     bool operator==(const pll &a) const { return x == a.x && y == a.y; }
  36.     bool operator!=(const pll &a) const { return x != a.x || y != a.y; }
  37.     pll operator+(const pll &a) const { return {x+a.x, y+a.y}; }
  38.     pll operator-(const pll &a) const { return {x-a.x, y-a.y}; }
  39.     pll operator*(const ll &a) const { return {x*a, y*a}; }
  40.     pll operator/(const ll &a) const { return {x/a, y/a}; }
  41. };
  42.  
  43. template<class T> bool ckmin(T& a, const T& b) {
  44.     return b < a ? a = b, 1 : 0; }
  45. template<class T> bool ckmax(T& a, const T& b) {
  46.     return a < b ? a = b, 1 : 0; }
  47.  
  48. int T, N;
  49. int a[200005];
  50.  
  51. int main() {
  52.     ios::sync_with_stdio(0);
  53.     cin.tie(0);
  54.     map<string,set<string>> adj;
  55.     set<string> tot;
  56.     string s;
  57.     while (cin >> s) {
  58.         string u = s.substr(0,2);
  59.         string v = s.substr(3,2);
  60.         tot.insert(u);
  61.         tot.insert(v);
  62.         adj[u].insert(v);
  63.         adj[v].insert(u);
  64.     }
  65.     vt<string> v;
  66.     for (auto &i:tot) {
  67.         v.pb(i);
  68.     }
  69.     cout << sz(v) << endl;
  70.     sort(all(v));
  71.     //find maximal clique
  72.     rep(i,0,sz(v)) {
  73.         rep(j,i+1,sz(v)) {
  74.             if (adj[v[i]].find(v[j]) == adj[v[i]].end()) {
  75.                 continue;
  76.             }
  77.             rep(k,j+1,sz(v)) {
  78.                 if (adj[v[i]].find(v[k]) == adj[v[i]].end() || adj[v[j]].find(v[k]) == adj[v[j]].end()) {
  79.                     continue;
  80.                 }
  81.                 rep(l,k+1,sz(v)) {
  82.                     if (adj[v[i]].find(v[l]) == adj[v[i]].end() || adj[v[j]].find(v[l]) == adj[v[j]].end() || adj[v[k]].find(v[l]) == adj[v[k]].end()) {
  83.                         continue;
  84.                     }
  85.                     rep(m,l+1,sz(v)) {
  86.                         if (adj[v[i]].find(v[m]) == adj[v[i]].end() || adj[v[j]].find(v[m]) == adj[v[j]].end() || adj[v[k]].find(v[m]) == adj[v[k]].end() || adj[v[l]].find(v[m]) == adj[v[l]].end()) {
  87.                             continue;
  88.                         }
  89.                         rep(n,m+1,sz(v)) {
  90.                             if (adj[v[i]].find(v[n]) == adj[v[i]].end() || adj[v[j]].find(v[n]) == adj[v[j]].end() || adj[v[k]].find(v[n]) == adj[v[k]].end() || adj[v[l]].find(v[n]) == adj[v[l]].end() || adj[v[m]].find(v[n]) == adj[v[m]].end()) {
  91.                                 continue;
  92.                             }
  93.                             rep(o,n+1,sz(v)) {
  94.                                 if (adj[v[i]].find(v[o]) == adj[v[i]].end() || adj[v[j]].find(v[o]) == adj[v[j]].end() || adj[v[k]].find(v[o]) == adj[v[k]].end() || adj[v[l]].find(v[o]) == adj[v[l]].end() || adj[v[m]].find(v[o]) == adj[v[m]].end() || adj[v[n]].find(v[o]) == adj[v[n]].end()) {
  95.                                     continue;
  96.                                 }
  97.                                 rep(p,o+1,sz(v)) {
  98.                                     if (adj[v[i]].find(v[p]) == adj[v[i]].end() || adj[v[j]].find(v[p]) == adj[v[j]].end() || adj[v[k]].find(v[p]) == adj[v[k]].end() || adj[v[l]].find(v[p]) == adj[v[l]].end() || adj[v[m]].find(v[p]) == adj[v[m]].end() || adj[v[n]].find(v[p]) == adj[v[n]].end() || adj[v[o]].find(v[p]) == adj[v[o]].end()) {
  99.                                         continue;
  100.                                     }
  101.                                     rep(q,p+1,sz(v)) {
  102.                                         if (adj[v[i]].find(v[q]) == adj[v[i]].end() || adj[v[j]].find(v[q]) == adj[v[j]].end() || adj[v[k]].find(v[q]) == adj[v[k]].end() || adj[v[l]].find(v[q]) == adj[v[l]].end() || adj[v[m]].find(v[q]) == adj[v[m]].end() || adj[v[n]].find(v[q]) == adj[v[n]].end() || adj[v[o]].find(v[q]) == adj[v[o]].end() || adj[v[p]].find(v[q]) == adj[v[p]].end()) {
  103.                                             continue;
  104.                                         }
  105.                                         rep(r,q+1,sz(v)) {
  106.                                             if (adj[v[i]].find(v[r]) == adj[v[i]].end() || adj[v[j]].find(v[r]) == adj[v[j]].end() || adj[v[k]].find(v[r]) == adj[v[k]].end() || adj[v[l]].find(v[r]) == adj[v[l]].end() || adj[v[m]].find(v[r]) == adj[v[m]].end() || adj[v[n]].find(v[r]) == adj[v[n]].end() || adj[v[o]].find(v[r]) == adj[v[o]].end() || adj[v[p]].find(v[r]) == adj[v[p]].end() || adj[v[q]].find(v[r]) == adj[v[q]].end()) {
  107.                                                 continue;
  108.                                             }
  109.                                             rep(s,r+1,sz(v)) {
  110.                                                 if (adj[v[i]].find(v[s]) == adj[v[i]].end() || adj[v[j]].find(v[s]) == adj[v[j]].end() || adj[v[k]].find(v[s]) == adj[v[k]].end() || adj[v[l]].find(v[s]) == adj[v[l]].end() || adj[v[m]].find(v[s]) == adj[v[m]].end() || adj[v[n]].find(v[s]) == adj[v[n]].end() || adj[v[o]].find(v[s]) == adj[v[o]].end() || adj[v[p]].find(v[s]) == adj[v[p]].end() || adj[v[q]].find(v[s]) == adj[v[q]].end() || adj[v[r]].find(v[s]) == adj[v[r]].end()) {
  111.                                                     continue;
  112.                                                 }
  113.                                                 rep(t,s+1,sz(v)) {
  114.                                                     if (adj[v[i]].find(v[t]) == adj[v[i]].end() || adj[v[j]].find(v[t]) == adj[v[j]].end() || adj[v[k]].find(v[t]) == adj[v[k]].end() || adj[v[l]].find(v[t]) == adj[v[l]].end() || adj[v[m]].find(v[t]) == adj[v[m]].end() || adj[v[n]].find(v[t]) == adj[v[n]].end() || adj[v[o]].find(v[t]) == adj[v[o]].end() || adj[v[p]].find(v[t]) == adj[v[p]].end() || adj[v[q]].find(v[t]) == adj[v[q]].end() || adj[v[r]].find(v[t]) == adj[v[r]].end() || adj[v[s]].find(v[t]) == adj[v[s]].end()) {
  115.                                                         continue;
  116.                                                     }
  117.                                                     rep(u,t+1,sz(v)) {
  118.                                                         if (adj[v[i]].find(v[u]) == adj[v[i]].end() || adj[v[j]].find(v[u]) == adj[v[j]].end() || adj[v[k]].find(v[u]) == adj[v[k]].end() || adj[v[l]].find(v[u]) == adj[v[l]].end() || adj[v[m]].find(v[u]) == adj[v[m]].end() || adj[v[n]].find(v[u]) == adj[v[n]].end() || adj[v[o]].find(v[u]) == adj[v[o]].end() || adj[v[p]].find(v[u]) == adj[v[p]].end() || adj[v[q]].find(v[u]) == adj[v[q]].end() || adj[v[r]].find(v[u]) == adj[v[r]].end() || adj[v[s]].find(v[u]) == adj[v[s]].end() || adj[v[t]].find(v[u]) == adj[v[t]].end()) {
  119.                                                             continue;
  120.                                                         }
  121.                                                         cout << v[i] << "," << v[j] << "," << v[k] << "," << v[l] << "," << v[m] << "," << v[n] << "," << v[o] << "," << v[p] << "," << v[q] << "," << v[r] << "," << v[s] << "," << v[t] << "," << v[u] << endl;
  122.                                                     }
  123.                                                 }
  124.                                             }
  125.                                         }
  126.                                     }
  127.                                 }
  128.                             }
  129.                         }
  130.                     }
  131.                 }
  132.             }
  133.         }
  134.     }
  135.     return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement