Ankit_132

C

Sep 9th, 2023
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.06 KB | None | 0 0
  1.  
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5. #define pb     push_back
  6.  
  7. int main()
  8. {
  9.     vector<vector<int>> c(3, vector<int> (3));
  10.     for(int i=0; i<3; i++)
  11.       for(int j=0; j<3; j++)
  12.         cin>>c[i][j];
  13.  
  14.     vector<int> v;
  15.     for(int i=0; i<9; i++)
  16.         v.pb(i);
  17.  
  18.     vector<array<int, 3>> prob;
  19.  
  20.     if(c[0][0]==c[0][1] && c[0][1]!=c[0][2])
  21.         prob.pb({0, 1, 2}), prob.pb({1, 0, 2});
  22.     if(c[0][0]!=c[0][1] && c[0][1]==c[0][2])
  23.         prob.pb({1, 2, 0}), prob.pb({2, 1, 0});
  24.     if(c[0][0]!=c[0][1] && c[0][0]==c[0][2])
  25.         prob.pb({0, 2, 1}), prob.pb({2, 0, 1});
  26.  
  27.     if(c[1][0]==c[1][1] && c[1][1]!=c[1][2])
  28.         prob.pb({3, 4, 5}), prob.pb({4, 3, 5});
  29.     if(c[1][0]!=c[1][1] && c[1][1]==c[1][2])
  30.         prob.pb({4, 5, 3}), prob.pb({5, 4, 3});
  31.     if(c[1][0]==c[1][2] && c[1][1]!=c[1][2])
  32.         prob.pb({3, 5, 4}), prob.pb({5, 3, 4});
  33.  
  34.     if(c[2][0]==c[2][1] && c[2][1]!=c[2][2])
  35.         prob.pb({6, 7, 8}), prob.pb({7, 6, 8});
  36.     if(c[2][0]!=c[2][1] && c[2][1]==c[2][2])
  37.         prob.pb({7, 8, 6}), prob.pb({8, 7, 6});
  38.     if(c[2][0]==c[2][2] && c[2][1]!=c[2][2])
  39.         prob.pb({6, 8, 7}), prob.pb({8, 6, 7});
  40.  
  41.     if(c[0][0]==c[1][0] && c[1][0]!=c[2][0])
  42.         prob.pb({0, 3, 6}), prob.pb({3, 0, 6});
  43.     if(c[0][0]!=c[1][0] && c[1][0]==c[2][0])
  44.         prob.pb({6, 3, 0}), prob.pb({3, 6, 0});
  45.     if(c[0][0]==c[2][0] && c[1][0]!=c[2][0])
  46.         prob.pb({6, 0, 3}), prob.pb({0, 6, 3});
  47.  
  48.     if(c[0][1]==c[1][1] && c[1][1]!=c[2][1])
  49.         prob.pb({1, 4, 7}), prob.pb({4, 1, 7});
  50.     if(c[0][1]!=c[1][1] && c[1][1]==c[2][1])
  51.         prob.pb({7, 4, 1}), prob.pb({4, 7, 1});
  52.     if(c[0][1]==c[2][1] && c[1][1]!=c[2][1])
  53.         prob.pb({1, 7, 4}), prob.pb({7, 1, 4});
  54.  
  55.     if(c[0][2]==c[1][2] && c[1][2]!=c[2][2])
  56.         prob.pb({2, 5, 8}), prob.pb({5, 2, 8});
  57.     if(c[0][2]!=c[1][2] && c[1][2]==c[2][2])
  58.         prob.pb({8, 5, 2}), prob.pb({5, 8, 2});
  59.     if(c[0][2]==c[2][2] && c[1][2]!=c[2][2])
  60.         prob.pb({2, 8, 5}), prob.pb({8, 2, 5});
  61.  
  62.     if(c[0][0]==c[1][1] && c[1][1]!=c[2][2])
  63.         prob.pb({0, 4, 8}), prob.pb({4, 0, 8});
  64.     if(c[0][0]!=c[1][1] && c[1][1]==c[2][2])
  65.         prob.pb({4, 8, 0}), prob.pb({8, 4, 0});
  66.     if(c[0][0]==c[2][2] && c[1][1]!=c[2][2])
  67.         prob.pb({0, 8, 4}), prob.pb({8, 0, 4});
  68.  
  69.     if(c[0][2]==c[1][1] && c[1][1]!=c[2][0])
  70.         prob.pb({2, 4, 6}), prob.pb({4, 2, 6});
  71.     if(c[0][2]!=c[1][1] && c[1][1]==c[2][0])
  72.         prob.pb({6, 4, 2}), prob.pb({4, 6, 2});
  73.     if(c[0][2]==c[2][0] && c[1][1]!=c[2][0])
  74.         prob.pb({2, 6, 4}), prob.pb({6, 2, 4});
  75.  
  76.     int tot = 0;
  77.     int dis = 0;
  78.  
  79.     vector<int> pos(10);
  80.     int f;
  81.  
  82.     do{
  83.         tot++;
  84.         f = 0;
  85.  
  86.         for(int i=0; i<9; i++)      pos[v[i]] = i;
  87.  
  88.         for(auto &[x, y, z]: prob)
  89.         {
  90.             if(pos[x]<pos[y] && pos[y]<pos[z])
  91.             {
  92.                 f = 1;
  93.                 break;
  94.             }
  95.         }
  96.  
  97.         dis += f;
  98.     }while(next_permutation(v.begin(), v.end()));
  99.  
  100.     cout<<fixed<<setprecision(20);
  101.     cout<<((tot - dis)*1.0)/tot<<"\n";
  102. }
  103.  
Advertisement
Add Comment
Please, Sign In to add comment