#include <iostream>
// #include<iomanip>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
char tab[8][8];
char tab_oczekiwane[8][8];
int lokacje_pionkow[2][8];
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cin >> tab[i][j];
}
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cin >> tab_oczekiwane[i][j];
}
}
int polozenie_poczotkowe = 0;
int polozenie_koncowe = 0;
int k = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(tab[i][j] == 'O'){
polozenie_poczotkowe += i + j;
}
if(tab_oczekiwane[i][j] == 'O'){
polozenie_koncowe += i + j;
lokacje_pionkow[0][k] = i;
lokacje_pionkow[1][k] = j;
k++;
}
}
}
//cout << polozenie_koncowe << endl << polozenie_poczotkowe;
if(polozenie_poczotkowe%2 != polozenie_koncowe%2){
cout << 0;
return 0;
}
// cout << 1;
double wynik = 0;
double wynik_tym_cel = 0;
double wynik_tym_pozostale = 0;
cout.precision(16);
// cout << wynik;
for(int i = 0; i < k; i++){
int q;
if((lokacje_pionkow[0][i] + lokacje_pionkow[1][i])%2 == 1){
q = 0;
}
else{
q = 1;
}
for(int j = 0; j < n; j++){
for(int l = q; l < m; l += 2){
// góra, prawo , dół, lewo
int ile_sasiadow = 0;
int czy_cel = 0; // 1 - TAK, 0 - NIE
if(tab_oczekiwane[j][l] != 'O'){ // góra
if(j != 0){
if(tab_oczekiwane[j-1][l] == '.'){
ile_sasiadow++;
}
if(j-1 == lokacje_pionkow[0][i] and l == lokacje_pionkow[1][i]){
ile_sasiadow++;
czy_cel = 1;
}
}
if(j != n-1){ // dół
if(tab_oczekiwane[j+1][l] == '.'){
ile_sasiadow++;
}
if(j+1 == lokacje_pionkow[0][i] and l == lokacje_pionkow[1][i]){
ile_sasiadow++;
czy_cel = 1;
}
}
if(l != 0){
if(tab_oczekiwane[j][l-1] == '.'){
ile_sasiadow++;
}
if(j == lokacje_pionkow[0][i] and l-1 == lokacje_pionkow[1][i]){
ile_sasiadow++;
czy_cel = 1;
}
}
if(l != m-1){
if(tab_oczekiwane[j][l+1] == '.'){
ile_sasiadow++;
}
if(j == lokacje_pionkow[0][i] and l+1 == lokacje_pionkow[1][i]){
ile_sasiadow++;
czy_cel = 1;
}
}
if(czy_cel == 0){
wynik_tym_pozostale += 12;
}
else{
wynik_tym_cel += 12/ile_sasiadow;
wynik_tym_pozostale += 12;
}
}
}
q++;
if(q == 2){
q = 0;
}
}
wynik += wynik_tym_cel/wynik_tym_pozostale;
}
cout << wynik;
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #include <iostream> // #include<iomanip> using namespace std; int main(){ int n, m; cin >> n >> m; char tab[8][8]; char tab_oczekiwane[8][8]; int lokacje_pionkow[2][8]; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin >> tab[i][j]; } } for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin >> tab_oczekiwane[i][j]; } } int polozenie_poczotkowe = 0; int polozenie_koncowe = 0; int k = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(tab[i][j] == 'O'){ polozenie_poczotkowe += i + j; } if(tab_oczekiwane[i][j] == 'O'){ polozenie_koncowe += i + j; lokacje_pionkow[0][k] = i; lokacje_pionkow[1][k] = j; k++; } } } //cout << polozenie_koncowe << endl << polozenie_poczotkowe; if(polozenie_poczotkowe%2 != polozenie_koncowe%2){ cout << 0; return 0; } // cout << 1; double wynik = 0; double wynik_tym_cel = 0; double wynik_tym_pozostale = 0; cout.precision(16); // cout << wynik; for(int i = 0; i < k; i++){ int q; if((lokacje_pionkow[0][i] + lokacje_pionkow[1][i])%2 == 1){ q = 0; } else{ q = 1; } for(int j = 0; j < n; j++){ for(int l = q; l < m; l += 2){ // góra, prawo , dół, lewo int ile_sasiadow = 0; int czy_cel = 0; // 1 - TAK, 0 - NIE if(tab_oczekiwane[j][l] != 'O'){ // góra if(j != 0){ if(tab_oczekiwane[j-1][l] == '.'){ ile_sasiadow++; } if(j-1 == lokacje_pionkow[0][i] and l == lokacje_pionkow[1][i]){ ile_sasiadow++; czy_cel = 1; } } if(j != n-1){ // dół if(tab_oczekiwane[j+1][l] == '.'){ ile_sasiadow++; } if(j+1 == lokacje_pionkow[0][i] and l == lokacje_pionkow[1][i]){ ile_sasiadow++; czy_cel = 1; } } if(l != 0){ if(tab_oczekiwane[j][l-1] == '.'){ ile_sasiadow++; } if(j == lokacje_pionkow[0][i] and l-1 == lokacje_pionkow[1][i]){ ile_sasiadow++; czy_cel = 1; } } if(l != m-1){ if(tab_oczekiwane[j][l+1] == '.'){ ile_sasiadow++; } if(j == lokacje_pionkow[0][i] and l+1 == lokacje_pionkow[1][i]){ ile_sasiadow++; czy_cel = 1; } } if(czy_cel == 0){ wynik_tym_pozostale += 12; } else{ wynik_tym_cel += 12/ile_sasiadow; wynik_tym_pozostale += 12; } } } q++; if(q == 2){ q = 0; } } wynik += wynik_tym_cel/wynik_tym_pozostale; } cout << wynik; return 0; } |
English