Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define pb push_back
- int main()
- {
- vector<vector<int>> c(3, vector<int> (3));
- for(int i=0; i<3; i++)
- for(int j=0; j<3; j++)
- cin>>c[i][j];
- vector<int> v;
- for(int i=0; i<9; i++)
- v.pb(i);
- vector<array<int, 3>> prob;
- if(c[0][0]==c[0][1] && c[0][1]!=c[0][2])
- prob.pb({0, 1, 2}), prob.pb({1, 0, 2});
- if(c[0][0]!=c[0][1] && c[0][1]==c[0][2])
- prob.pb({1, 2, 0}), prob.pb({2, 1, 0});
- if(c[0][0]!=c[0][1] && c[0][0]==c[0][2])
- prob.pb({0, 2, 1}), prob.pb({2, 0, 1});
- if(c[1][0]==c[1][1] && c[1][1]!=c[1][2])
- prob.pb({3, 4, 5}), prob.pb({4, 3, 5});
- if(c[1][0]!=c[1][1] && c[1][1]==c[1][2])
- prob.pb({4, 5, 3}), prob.pb({5, 4, 3});
- if(c[1][0]==c[1][2] && c[1][1]!=c[1][2])
- prob.pb({3, 5, 4}), prob.pb({5, 3, 4});
- if(c[2][0]==c[2][1] && c[2][1]!=c[2][2])
- prob.pb({6, 7, 8}), prob.pb({7, 6, 8});
- if(c[2][0]!=c[2][1] && c[2][1]==c[2][2])
- prob.pb({7, 8, 6}), prob.pb({8, 7, 6});
- if(c[2][0]==c[2][2] && c[2][1]!=c[2][2])
- prob.pb({6, 8, 7}), prob.pb({8, 6, 7});
- if(c[0][0]==c[1][0] && c[1][0]!=c[2][0])
- prob.pb({0, 3, 6}), prob.pb({3, 0, 6});
- if(c[0][0]!=c[1][0] && c[1][0]==c[2][0])
- prob.pb({6, 3, 0}), prob.pb({3, 6, 0});
- if(c[0][0]==c[2][0] && c[1][0]!=c[2][0])
- prob.pb({6, 0, 3}), prob.pb({0, 6, 3});
- if(c[0][1]==c[1][1] && c[1][1]!=c[2][1])
- prob.pb({1, 4, 7}), prob.pb({4, 1, 7});
- if(c[0][1]!=c[1][1] && c[1][1]==c[2][1])
- prob.pb({7, 4, 1}), prob.pb({4, 7, 1});
- if(c[0][1]==c[2][1] && c[1][1]!=c[2][1])
- prob.pb({1, 7, 4}), prob.pb({7, 1, 4});
- if(c[0][2]==c[1][2] && c[1][2]!=c[2][2])
- prob.pb({2, 5, 8}), prob.pb({5, 2, 8});
- if(c[0][2]!=c[1][2] && c[1][2]==c[2][2])
- prob.pb({8, 5, 2}), prob.pb({5, 8, 2});
- if(c[0][2]==c[2][2] && c[1][2]!=c[2][2])
- prob.pb({2, 8, 5}), prob.pb({8, 2, 5});
- if(c[0][0]==c[1][1] && c[1][1]!=c[2][2])
- prob.pb({0, 4, 8}), prob.pb({4, 0, 8});
- if(c[0][0]!=c[1][1] && c[1][1]==c[2][2])
- prob.pb({4, 8, 0}), prob.pb({8, 4, 0});
- if(c[0][0]==c[2][2] && c[1][1]!=c[2][2])
- prob.pb({0, 8, 4}), prob.pb({8, 0, 4});
- if(c[0][2]==c[1][1] && c[1][1]!=c[2][0])
- prob.pb({2, 4, 6}), prob.pb({4, 2, 6});
- if(c[0][2]!=c[1][1] && c[1][1]==c[2][0])
- prob.pb({6, 4, 2}), prob.pb({4, 6, 2});
- if(c[0][2]==c[2][0] && c[1][1]!=c[2][0])
- prob.pb({2, 6, 4}), prob.pb({6, 2, 4});
- int tot = 0;
- int dis = 0;
- vector<int> pos(10);
- int f;
- do{
- tot++;
- f = 0;
- for(int i=0; i<9; i++) pos[v[i]] = i;
- for(auto &[x, y, z]: prob)
- {
- if(pos[x]<pos[y] && pos[y]<pos[z])
- {
- f = 1;
- break;
- }
- }
- dis += f;
- }while(next_permutation(v.begin(), v.end()));
- cout<<fixed<<setprecision(20);
- cout<<((tot - dis)*1.0)/tot<<"\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment