Advertisement
mickypinata

USACO-T013: Combination Lock

Nov 26th, 2021
892
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. ID: mickyta1
  3. TASK: combo
  4. LANG: C++
  5. */
  6.  
  7. #include <bits/stdc++.h>
  8. using namespace std;
  9.  
  10. const int N = 3 + 5;
  11.  
  12. int A[N], B[N], C[N], n;
  13. set<int> visited[N];
  14.  
  15. bool CCanOpenB(){
  16.     for(int i = 1; i <= 3; ++i){
  17.         int up = (n + C[i] - B[i]) % n;
  18.         int down = (n + B[i] - C[i]) % n;
  19.         if(up > 2 && down > 2){
  20.             return false;
  21.         }
  22.     }
  23.     return true;
  24. }
  25.  
  26. int main(){
  27.  
  28.     freopen("combo.in", "r", stdin);
  29.     freopen("combo.out", "w", stdout);
  30.  
  31.     scanf("%d", &n);
  32.     for(int i = 1; i <= 3; ++i){
  33.         scanf("%d", &A[i]);
  34.         --A[i];
  35.     }
  36.     for(int i = 1; i <= 3; ++i){
  37.         scanf("%d", &B[i]);
  38.         --B[i];
  39.     }
  40.     int cnt = 0;
  41.     for(int a = -2; a <= 2; ++a){
  42.         C[1] = (n + A[1] + a) % n;
  43.         if(visited[1].find(C[1]) != visited[1].end()){
  44.             break;
  45.         }
  46.         visited[1].insert(C[1]);
  47.         for(int b = -2; b <= 2; ++b){
  48.             C[2] = (n + A[2] + b) % n;
  49.             if(visited[2].find(C[2]) != visited[2].end()){
  50.                 break;
  51.             }
  52.             visited[2].insert(C[2]);
  53.             for(int c = -2; c <= 2; ++c){
  54.                 C[3] = (n + A[3] + c) % n;
  55.                 if(visited[3].find(C[3]) != visited[3].end()){
  56.                     break;
  57.                 }
  58.                 visited[3].insert(C[3]);
  59.                 if(CCanOpenB()){
  60.                     ++cnt;
  61.                 }
  62.             }
  63.             visited[3].clear();
  64.         }
  65.         visited[2].clear();
  66.     }
  67.     int roll = min(n, 5);
  68.     int half = roll * roll * roll;
  69.     cout << half + half - cnt << '\n';
  70.  
  71.     fclose(stdin);
  72.     fclose(stdout);
  73.  
  74.     return 0;
  75. }
  76.  
Advertisement
RAW Paste Data Copied
Advertisement