#include <bits/stdc++.h> using namespace std; typedef long long int lli; typedef long double lf; const int MAXN = 20; char t[MAXN][MAXN]; char tar[MAXN][MAXN]; int trans(char a, char b) { if (a == 'O' && b == '.') return 1; if (a == '.' && b == 'O') return 1; return 0; } lli binom(lli n, lli k) { lli res = 1; lli k_fac = 1; for (lli i=0; i<k; i++) { res *= n-i; k_fac *= i+1; } return res / k_fac; } int main() { lli n, m, k=0; lli deg = 0; int par = 0; scanf("%lld%lld%*c", &n, &m); for (int i=0; i<n; i++) scanf("%s", t[i]); for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { if (t[i][j] == 'O') { k++; par += i+j; } } } scanf("%*c"); for (int i=0; i<n; i++) scanf("%s", tar[i]); for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { if (tar[i][j] == 'O') { par -= i+j; } deg += trans(tar[i][j], tar[i][j+1]); deg += trans(tar[i][j], tar[i+1][j]); } } if (par % 2 != 0) { printf("0\n"); return 0; } lf sumdeg = (2*m*n - n - m) * 2 * binom(n*m-2, k-1); lf tar_deg = 2 * deg; printf("%.15Lf\n", tar_deg / sumdeg); return 0; }
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #include <bits/stdc++.h> using namespace std; typedef long long int lli; typedef long double lf; const int MAXN = 20; char t[MAXN][MAXN]; char tar[MAXN][MAXN]; int trans(char a, char b) { if (a == 'O' && b == '.') return 1; if (a == '.' && b == 'O') return 1; return 0; } lli binom(lli n, lli k) { lli res = 1; lli k_fac = 1; for (lli i=0; i<k; i++) { res *= n-i; k_fac *= i+1; } return res / k_fac; } int main() { lli n, m, k=0; lli deg = 0; int par = 0; scanf("%lld%lld%*c", &n, &m); for (int i=0; i<n; i++) scanf("%s", t[i]); for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { if (t[i][j] == 'O') { k++; par += i+j; } } } scanf("%*c"); for (int i=0; i<n; i++) scanf("%s", tar[i]); for (int i=0; i<n; i++) { for (int j=0; j<m; j++) { if (tar[i][j] == 'O') { par -= i+j; } deg += trans(tar[i][j], tar[i][j+1]); deg += trans(tar[i][j], tar[i+1][j]); } } if (par % 2 != 0) { printf("0\n"); return 0; } lf sumdeg = (2*m*n - n - m) * 2 * binom(n*m-2, k-1); lf tar_deg = 2 * deg; printf("%.15Lf\n", tar_deg / sumdeg); return 0; } |