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