#include<bits/stdc++.h> using namespace std; long long binom(long long n, long long k){ long long res = 1; for(int i= 0; i < k; i++)res *= (n - i); for(int i= 1; i <= k; i++)res = res / i; return res; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); long long n, m; cin>>n>>m; vector<string> beg(n); for(int i= 0; i < n; i++)cin>>beg[i]; vector<string> end(n); for(int i= 0; i < n; i++)cin>>end[i]; int a = 0; int b = 0; for(int i= 0; i < n; i++){ for(int j= 0; j < m; j++){ if((i + j) % 2 == 0){ if(beg[i][j] == 'O')a++; if(end[i][j] == 'O')b++; } } } if(a % 2 != b % 2){ cout<<"0\n"; }else{ long long k = 0; for(int i= 0; i < n; i++){ for(int j= 0; j < m; j++){ if(beg[i][j] == 'O')k++; } } long double div = 1.0 * (2 * m * n - n - m) * binom(n * m - 2, k -1); long double deg = 0; for(int i= 0; i < n-1; i++){ for(int j= 0; j < m; j++){ if(end[i][j] != end[i+1][j])deg++; } } for(int i= 0; i < n; i++){ for(int j= 0; j < m-1; j++){ if(end[i][j] != end[i][j+1])deg++; } } long double res = deg / div; cout<<setprecision(13)<<fixed<<res<<"\n"; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include<bits/stdc++.h> using namespace std; long long binom(long long n, long long k){ long long res = 1; for(int i= 0; i < k; i++)res *= (n - i); for(int i= 1; i <= k; i++)res = res / i; return res; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); long long n, m; cin>>n>>m; vector<string> beg(n); for(int i= 0; i < n; i++)cin>>beg[i]; vector<string> end(n); for(int i= 0; i < n; i++)cin>>end[i]; int a = 0; int b = 0; for(int i= 0; i < n; i++){ for(int j= 0; j < m; j++){ if((i + j) % 2 == 0){ if(beg[i][j] == 'O')a++; if(end[i][j] == 'O')b++; } } } if(a % 2 != b % 2){ cout<<"0\n"; }else{ long long k = 0; for(int i= 0; i < n; i++){ for(int j= 0; j < m; j++){ if(beg[i][j] == 'O')k++; } } long double div = 1.0 * (2 * m * n - n - m) * binom(n * m - 2, k -1); long double deg = 0; for(int i= 0; i < n-1; i++){ for(int j= 0; j < m; j++){ if(end[i][j] != end[i+1][j])deg++; } } for(int i= 0; i < n; i++){ for(int j= 0; j < m-1; j++){ if(end[i][j] != end[i][j+1])deg++; } } long double res = deg / div; cout<<setprecision(13)<<fixed<<res<<"\n"; } } |