DuongNhi99

27-11

Nov 27th, 2020 (edited)
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.65 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef pair<int, int> ii;
  5.  
  6. int n;
  7. int sum, best = 1e9;
  8. vector<ii> best_state;
  9.  
  10. bool get_bit(int x, int k) {
  11.     return (x >> k) & 1;
  12. }
  13.  
  14. void rotate(ii &box) {
  15.     int b = get_bit(box.first, 4);
  16.     box.first <<= 1;
  17.     box.first |= b << 1;
  18.     ++box.second;
  19. }
  20.  
  21. void backtrack(vector<ii> boxes, int i) {
  22.     if(i == n) {
  23.         sum = 0;
  24.  
  25.         for(auto &x : boxes) {
  26.             sum += !!x.second;
  27.         }
  28.  
  29.         if(sum < best) {
  30.             best = sum;
  31.             best_state = boxes;
  32.         }
  33.         return;
  34.     }
  35.  
  36.     for(int k = 1; k < 4; k++) {
  37.         if(get_bit(boxes[i-1].first, 2) == get_bit(boxes[i].first, 4))
  38.             backtrack(boxes, i + 1);
  39.         rotate(boxes[i]);
  40.     }
  41. }
  42. int main()
  43. {
  44.     freopen("in.txt", "r", stdin);
  45.     //freopen("27-11.inp", "r", stdin);
  46.     //freopen("27-11.out", "w", stdout);
  47.     ios_base::sync_with_stdio(false);
  48.     cin.tie(NULL); cout.tie(NULL);
  49.  
  50.     cin >> n;
  51.  
  52.     vector<ii> a(n);
  53.     for(auto &x : a) {
  54.         for(int i = 1; i <= 4; ++i) {
  55.             int t; cin >> t;
  56.             x.first |= (t << i);
  57.         }
  58.     }
  59.  
  60.     for(int k = 0; k < 4; ++k) {
  61.         backtrack(a, 1);
  62.         rotate(a[0]);
  63.     }
  64.  
  65.     // Cau 1:
  66.     cout << best << '\n';
  67.     for(int i = 1; i <= n; i++) {
  68.         if (best_state[i - 1].second) {
  69.             cout << i << ' ';
  70.         }
  71.     }
  72.     cout << '\n';
  73.  
  74.     // Cau 2:
  75.     for(auto x : best_state)
  76.         cout << get_bit(x.first, 1) << ' ';
  77.     cout << '\n';
  78.  
  79.     for(auto x : best_state)
  80.         cout << get_bit(x.first, 3) << ' ';
  81.     cout << '\n';
  82.  
  83.     return 0;
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment