Pagini recente » Cod sursa (job #2324681) | Cod sursa (job #2873149) | Cod sursa (job #3138672) | Cod sursa (job #3285521) | Cod sursa (job #1250282)
#include<cstdio>
using namespace std;
int nr, n, m, X, cod[30][30];
double eps, A[500][500];
double Get (int p)
{
return A[p][nr+1] / A[p][p];
}
void afis ()
{
for (int i=19; i<=19; i++, printf("\n"))
for (int j=1; j<=nr+1; j++)
printf ("%.5lf ", A[i][j]);
}
int main()
{
freopen ("minesweeper.in", "r", stdin);
freopen ("minesweeper.out", "w", stdout);
scanf ("%d %d", &n, &m);
X = n * m;
for (int i=0; i <= X; i++)
for (int j=0; i+j <=X; j++)
cod[i][j] = ++nr;
for (int i=0; i<=X; i++)
for (int j=0; i+j <=X; j++)
{
if (i==0 && j==0)
{
A[cod[i][j]][cod[i][j]] = 1.0;
continue;
}
A[cod[i][j]][cod[i][j]] = 1.0;
if (i) A[cod[i][j]][cod[i-1][j+1]] = (double) -i/X;
if (j) A[cod[i][j]][cod[i][j-1]] = (double) -j/X;
A[cod[i][j]][cod[i+1][j]] = (double) -(X-i-j)/X;
A[cod[i][j]][nr+1] = 1.0;
}
for (int i=1; i<=nr; i++)
for (int j=i+1; j<=nr; j++)
{
double rap = A[j][i] / A[i][i];
for (int k=1; k<=nr+1; k++)
A[j][k] = (double) A[j][k] - A[i][k] * rap;
}
printf ("%.6lf\n", (double)A[cod[X][0]][nr+1] / A[cod[X][0]][cod[X][0]]);
return 0;
}