#include<iostream> #include<iomanip> using namespace std; int p[2][2];//reszta x mod 2, reszta y mod 2 long long dn(int n, int k){//zal: n>k long long w=1; for(long long i=n; i>n-k; i--){ w*=i; } for(long long i=2; i<=k; i++){ w/=i; } return w; } int main(){ //ios_base::sync_with_stdio(0); //cin.tie(0); int n, m; cin>>n>>m; char przed[n][m]; char po[n][m]; int suma_x1=0, suma_y1=0, suma_x2=0, suma_y2=0; int k=0; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ p[i%2][j%2]++; cin>>przed[i][j]; if(przed[i][j]=='O'){ suma_x1+=j; suma_y1+=i; k++; } } } for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin>>po[i][j]; if(po[i][j]=='O'){ suma_x2+=j; suma_y2+=i; } } } if((suma_x1+suma_y1)%2!=(suma_x2+suma_y2)%2){ cout<<0; return 0; } long long mianownik=0; for(int a=0; a<=p[0][0]; a++){ for(int b=0; b<=p[0][1]; b++){ for(int c=0; c<=p[1][0]; c++){ for(int d=0; d<=p[1][1]; d++){ cout<<a<<' '<<b<<' '<<c<<' '<<d<<'\n'; if(a+b+c+d==k && (b+c+2*d)%2==(suma_x1+suma_y1)%2){ mianownik+=dn(p[0][0], a)*dn(p[0][1], b)*dn(p[1][0], c)*dn(p[1][1], d); } } } } } long double temp=1; long double temp2=mianownik; temp/=temp2; cout<<setprecision(13)<<fixed; cout<<temp; }
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 | #include<iostream> #include<iomanip> using namespace std; int p[2][2];//reszta x mod 2, reszta y mod 2 long long dn(int n, int k){//zal: n>k long long w=1; for(long long i=n; i>n-k; i--){ w*=i; } for(long long i=2; i<=k; i++){ w/=i; } return w; } int main(){ //ios_base::sync_with_stdio(0); //cin.tie(0); int n, m; cin>>n>>m; char przed[n][m]; char po[n][m]; int suma_x1=0, suma_y1=0, suma_x2=0, suma_y2=0; int k=0; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ p[i%2][j%2]++; cin>>przed[i][j]; if(przed[i][j]=='O'){ suma_x1+=j; suma_y1+=i; k++; } } } for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin>>po[i][j]; if(po[i][j]=='O'){ suma_x2+=j; suma_y2+=i; } } } if((suma_x1+suma_y1)%2!=(suma_x2+suma_y2)%2){ cout<<0; return 0; } long long mianownik=0; for(int a=0; a<=p[0][0]; a++){ for(int b=0; b<=p[0][1]; b++){ for(int c=0; c<=p[1][0]; c++){ for(int d=0; d<=p[1][1]; d++){ cout<<a<<' '<<b<<' '<<c<<' '<<d<<'\n'; if(a+b+c+d==k && (b+c+2*d)%2==(suma_x1+suma_y1)%2){ mianownik+=dn(p[0][0], a)*dn(p[0][1], b)*dn(p[1][0], c)*dn(p[1][1], d); } } } } } long double temp=1; long double temp2=mianownik; temp/=temp2; cout<<setprecision(13)<<fixed; cout<<temp; } |