#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"; } } |
English