Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.59 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <map>
  5. #include <stack>
  6. #include <deque>
  7. #include <string>
  8. using namespace std;
  9. void var(int c, int f, pair<int, int>& v1, pair<int, int>& v2) {
  10.     if (c == 1) v1 = pair<int, int>(2, 3);
  11.     if (c == 2) v1 = pair<int, int>(1, 3);
  12.     if (c == 3) v1 = pair<int, int>(2, 1);
  13.     if (f == 1) v2 = pair<int, int>(2, 3);
  14.     if (f == 2) v2 = pair<int, int>(1, 3);
  15.     if (f == 3) v2 = pair<int, int>(2, 1);
  16.    
  17. }
  18. int main()
  19. {
  20.     int n;
  21.     cin >> n;
  22.     vector<int> ans;
  23.     map<int, vector<int>> cards;
  24.     int c, f;
  25.     cin >> c >> f;
  26.     cards[3 * (c - 1) + f].push_back(1);
  27.     for (int i = 2; i <= n; i++) {
  28.         cin >> c >> f;
  29.         if (cards[3 * (c - 1) + f].size() == 2) {
  30.             ans.push_back(i);
  31.             ans.push_back(cards[3 * (c - 1) + f][0]);
  32.             ans.push_back(cards[3 * (c - 1) + f][1]);
  33.             cards[3 * (c - 1) + f].pop_back();
  34.             cards[3 * (c - 1) + f].pop_back();
  35.         }
  36.         else {
  37.             pair<int, int> v1;
  38.             pair<int, int> v2;
  39.             var(c, f, v1, v2);
  40.             if (cards[3 * (c - 1) + v2.first].size() > 0 & cards[3 * (c - 1) + v2.second].size() > 0) {
  41.                 ans.push_back(i);
  42.                 ans.push_back(cards[3 * (c - 1) + v2.first].back());
  43.                 ans.push_back(cards[3 * (c - 1) + v2.second].back());
  44.                 cards[3 * (c - 1) + v2.first].pop_back();
  45.                 cards[3 * (c - 1) + v2.second].pop_back();
  46.                
  47.             }
  48.             else if(cards[3 * (v1.first - 1) + f].size() > 0 & cards[3 * (v1.second - 1) + f].size() > 0){
  49.                 ans.push_back(i);
  50.                 ans.push_back(cards[3 * (v1.first - 1) + f].back());
  51.                 ans.push_back(cards[3 * (v1.second - 1) + f].back());
  52.                 cards[3 * (v1.first - 1) + f].pop_back();
  53.                 cards[3 * (v1.second - 1) + f].pop_back();
  54.                
  55.             }
  56.             else if(cards[3 * (v1.first - 1) + v2.first].size() > 0 & cards[3 * (v1.second - 1) + v2.second].size() > 0){
  57.                 ans.push_back(i);
  58.                 ans.push_back(cards[3 * (v1.first - 1) + v2.first].back());
  59.                 ans.push_back(cards[3 * (v1.second - 1) + v2.second].back());
  60.                 cards[3 * (v1.first - 1) + v2.first].pop_back();
  61.                 cards[3 * (v1.second - 1) + v2.second].pop_back();
  62.                
  63.             }
  64.             else if(cards[3 * (v1.first - 1) + v2.second].size() > 0 & cards[3 * (v1.second - 1) + v2.first].size() > 0){
  65.                 ans.push_back(i);
  66.                 ans.push_back(cards[3 * (v1.first - 1) + v2.second].back());
  67.                 ans.push_back(cards[3 * (v2.second - 1) + v2.first].back());
  68.                 cards[3 * (v1.first - 1) + v2.second].pop_back();
  69.                 cards[3 * (v2.second - 1) + v2.first].pop_back();
  70.                
  71.             }
  72.             else cards[3 * (c - 1) + f].push_back(i);
  73.            
  74.            
  75.         }
  76.     }
  77.     for (int i = 0; i < ans.size() - 2;i+=3) cout << ans[i] << " " << ans[i + 1] << " " << ans[i + 2] << endl;
  78.  
  79.  
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement