Pagini recente » Cod sursa (job #362579) | Cod sursa (job #2174137) | Cod sursa (job #1765050) | Cod sursa (job #1930678) | Cod sursa (job #638048)
Cod sursa(job #638048)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cstring>
const int TRIALS = 400;
const int STEPS = 50;
int n, m, state[30][30];
int randint(int maxval)
{
return rand() % (maxval+1);
while (1)
{
int x = rand() & 31;
if (x <= maxval) return x;
}
}
int sim(int steps)
{
memset(state, 0, sizeof(state));
int nr = 0;
for (int step = 1; step <= steps; ++step)
{
int x = randint(n-1);
int y = randint(m-1);
if (state[x][y] == 2) --nr;
state[x][y] = (state[x][y] + 1) % 3;
if (state[x][y] == 2) ++nr;
if (nr == n*m && step != steps) return 0;
}
return nr == n*m ? 1 : 0;
}
int main()
{
freopen("minesweeper.in", "r", stdin);
freopen("minesweeper.out", "w", stdout);
scanf("%d%d", &n, &m);
srand(time(NULL));
double E = 0;
for (int i = 0; i < STEPS; ++i)
{
double p = 0;
for (int j=0; j < TRIALS; ++j)
p += sim(2*n*m + 3*i);
p /= TRIALS;
E += p * (2*n*m + 3*i);
}
printf("%lf\n", E);
return 0;
}