钉子和小球
来源:互联网 发布:百分百微信扫码软件 编辑:程序博客网 时间:2024/06/11 22:02
#include<iostream> #include<cmath> using namespace std; char graph[60][60] ; long long result[60][60] ; long long gcd( long long a ,long long b ) { if(b == 0) return a ; else return gcd(b, a % b); } int main() { int i, j; int n, m ; cin >> n >> m; for(i = 0; i < n; i++) for( j= 0;j <= i; ++j) cin >> graph[i][j] ; result[0][0] = (long long)1 << n ; for(i = 0; i <= n ; ++i) { for(j = 0;j <= i; ++j) { if( graph[i - 1][j] == '*' ) { result[i][j] += ( result[i-1][j] >> 1); result[i][j + 1] += ( result[i-1][j] >> 1); } else result[i + 1][j + 1] += result[i - 1][j] ; } } if( result[n][m] == 0) cout << "0/1" << endl; else { long long po = (long long)1 << n ; long long d = gcd(result[n][m] , po) ; cout << result[n][m] / d << "/" << po / d << endl; } return 0; }