zoukankan      html  css  js  c++  java
  • Flea Circus(Project Euler 213)

    original version

    hackerrank programming version

    题目大意是N*N的格子,每个格子一开始有1个跳蚤,每过单位时间跳蚤会等概率向四周跳,问M秒后空格子的期望个数。

    题解:

    对于每个跳蚤暴力模拟每一秒,算出M秒后它到各个格子的概率最后统计就好了,hackerrank上的版本需要常数优化,比如根据对称性只考虑左上四分之一块矩形.

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 
      4 typedef long long LL;
      5 const int mod = 1e9 + 7;
      6 #define MAXN 42
      7 #define MP make_pair
      8 const int INF = 1e9 + 10;
      9 
     10 int n, m;
     11 int s[MAXN][MAXN], tmp[MAXN][MAXN], cnt[MAXN][MAXN];
     12 LL p[MAXN][MAXN];
     13 int dx[] = {0, 0, -1, 1};
     14 int dy[] = {1, -1, 0, 0};
     15 int inv[5];
     16 
     17 
     18 int power(int x, int p)
     19 {
     20     int res = 1;
     21     for (; p; p >>= 1)
     22     {
     23         if (p & 1) res = 1LL * res * x % mod;
     24         x = 1LL * x * x % mod;
     25     }
     26     return res;
     27 }
     28 
     29 void work(int sx, int sy)
     30 {
     31     for (int i = 1; i <= n; ++i)
     32         for (int j = 1; j <= n; ++j)
     33             s[i][j] = 0;
     34     s[sx][sy] = 1;
     35      
     36     int x, y;
     37     for (int _m = 1; _m <= m; ++_m)
     38     {
     39         for (int i = 1; i <= n; ++i)
     40             for (int j = 1; j <= n; ++j)
     41                 tmp[i][j] = 0;
     42         for (int i = 1; i <= n; ++i)
     43         {
     44             for (int j = 1; j <= n; ++j)
     45             {
     46                 for (int d = 0; d < 4; ++d)
     47                 {
     48                     x = i + dx[d];
     49                     y = j + dy[d];
     50                     (tmp[x][y] += 1LL * cnt[i][j] * s[i][j] % mod) %= mod;
     51                 }
     52             }
     53         }
     54         for (int i = 1; i <= n; ++i)
     55             for (int j = 1; j <= n; ++j)
     56                 s[i][j] = tmp[i][j];
     57     }
     58     int t;
     59     for (int i = 1; i <= n; ++i)
     60     {
     61         for (int j = 1; j <= n; ++j)
     62         {
     63             t = 1 - s[i][j] + mod;
     64             (p[i][j] *= t) %= mod;
     65             (p[n + 1 - i][j] *= t) %= mod;
     66             (p[i][n + 1 - j] *= t) %= mod;
     67             (p[n + 1 - i][n + 1 - j] *= t) %= mod;
     68         }
     69     }
     70 }
     71 
     72 
     73 
     74 int main() 
     75 {
     76     //freopen("in.txt", "r", stdin);
     77     //freopen("out.txt", "w", stdout);
     78 
     79     inv[1] = 1;
     80     inv[2] = power(2, mod - 2);
     81     inv[3] = power(3, mod - 2);
     82     inv[4] = power(4, mod - 2);
     83     
     84     int T, x, y;
     85     scanf("%d", &T);
     86     while (T--)
     87     {
     88         scanf("%d %d", &n, &m);
     89         for (int i = 1; i <= n; ++i)
     90         {
     91             for (int j = 1; j <= n; ++j)
     92             {
     93                 cnt[i][j] = 0;
     94                 for (int d = 0; d < 4; ++d)
     95                 {
     96                     x = i + dx[d];
     97                     y = j + dy[d];
     98                     if (x >= 1 && x <= n && y >= 1 && y <= n)
     99                         ++cnt[i][j];
    100                 }
    101                 cnt[i][j] = inv[cnt[i][j]];
    102             }
    103             
    104         }
    105         for (int i = 1; i <= n; ++i)
    106             for (int j = 1; j <= n; ++j)
    107                 p[i][j] = 1;
    108         LL ans = 0;
    109         for (int i = 1; i <= n / 2; ++i)
    110             for (int j = 1; j <= n / 2; ++j)
    111                 work(i, j);
    112         for (int i = 1; i <= n; ++i)
    113             for (int j = 1; j <= n; ++j)
    114                 ans += p[i][j];
    115         ans %= mod;
    116         cout << ans << endl;
    117      }
    118     
    119     return 0; 
    120 }
  • 相关阅读:
    jquery中attr和prop的区别
    Server.MapPath用法
    ERP登录(八)
    ViewBag、ViewData和TempData的使用和区别
    ERP权限系统(七)
    C#泛型(三)
    ERP员工入登记查询(六)
    ERP员工入职登记(五)
    MVC学习IIS的不同版本(一)
    兔子谋杀案
  • 原文地址:https://www.cnblogs.com/vb4896/p/9259011.html
Copyright © 2011-2022 走看看