original version

hackerrank programming version

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

题解:

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

 #include <bits/stdc++.h>
using namespace std; typedef long long LL;
const int mod = 1e9 + ;
#define MAXN 42
#define MP make_pair
const int INF = 1e9 + ; int n, m;
int s[MAXN][MAXN], tmp[MAXN][MAXN], cnt[MAXN][MAXN];
LL p[MAXN][MAXN];
int dx[] = {, , -, };
int dy[] = {, -, , };
int inv[]; int power(int x, int p)
{
int res = ;
for (; p; p >>= )
{
if (p & ) res = 1LL * res * x % mod;
x = 1LL * x * x % mod;
}
return res;
} void work(int sx, int sy)
{
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
s[i][j] = ;
s[sx][sy] = ; int x, y;
for (int _m = ; _m <= m; ++_m)
{
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
tmp[i][j] = ;
for (int i = ; i <= n; ++i)
{
for (int j = ; j <= n; ++j)
{
for (int d = ; d < ; ++d)
{
x = i + dx[d];
y = j + dy[d];
(tmp[x][y] += 1LL * cnt[i][j] * s[i][j] % mod) %= mod;
}
}
}
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
s[i][j] = tmp[i][j];
}
int t;
for (int i = ; i <= n; ++i)
{
for (int j = ; j <= n; ++j)
{
t = - s[i][j] + mod;
(p[i][j] *= t) %= mod;
(p[n + - i][j] *= t) %= mod;
(p[i][n + - j] *= t) %= mod;
(p[n + - i][n + - j] *= t) %= mod;
}
}
} int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout); inv[] = ;
inv[] = power(, mod - );
inv[] = power(, mod - );
inv[] = power(, mod - ); int T, x, y;
scanf("%d", &T);
while (T--)
{
scanf("%d %d", &n, &m);
for (int i = ; i <= n; ++i)
{
for (int j = ; j <= n; ++j)
{
cnt[i][j] = ;
for (int d = ; d < ; ++d)
{
x = i + dx[d];
y = j + dy[d];
if (x >= && x <= n && y >= && y <= n)
++cnt[i][j];
}
cnt[i][j] = inv[cnt[i][j]];
} }
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
p[i][j] = ;
LL ans = ;
for (int i = ; i <= n / ; ++i)
for (int j = ; j <= n / ; ++j)
work(i, j);
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
ans += p[i][j];
ans %= mod;
cout << ans << endl;
} return ;
}

Flea Circus(Project Euler 213)的更多相关文章

  1. 微信公众平台java开发具体解释(project代码+解析)

    说明: 本次的教程主要是对微信公众平台开发人员模式的解说,网络上非常多类似文章,但非常多都让初学微信开发的人一头雾水,所以总结自己的微信开发经验,将微信开发的整个过程系统的列出,并对主要代码进行解说分 ...

  2. 项目启动会(project initiating meeting)与项目开工会(kick-off meeting)区别

    一.项目启动会initiating meeting 召开时间:是启动阶段结束时召开的会议:主要任务:发布项目章程,并任命项目经理,赋予项目经理动用组织资源的权力:注意事项:(1)会议召开前已经对干系人 ...

  3. 软件项目量化管理(CMMI高成熟度)实践经验谈——之项目管理过程策划篇

    续:软件项目量化管理(CMMI高成熟度)实践经验谈--之概述篇 二.项目管理过程 软件开发项目管理过程,从项目全视角来看,分为售前.售中.售后等三个大的阶段.本文所谈的是售中阶段项目管理过程,在售中阶 ...

  4. PMP十五至尊图(第六版)

    PMP(Project Management Professinoal)项目经理专业资格认证,由美国项目管理学会PMI(Project Management Institute)发起并组织的一种资格认 ...

  5. Project Euler 21 Distinct primes factors( 整数因子和 )

    题意: 记d(n)为n的所有真因数(小于n且整除n的正整数)之和. 如果d(a) = b且d(b) = a,且a ≠ b,那么a和b构成一个亲和数对,a和b被称为亲和数. 例如,220的真因数包括1. ...

  6. HDU2824 The Euler function(欧拉函数)

    题目求φ(a)+φ(a+1)+...+φ(b-1)+φ(b). 用欧拉筛选法O(n)计算出n以内的φ值,存个前缀和即可. φ(p)=p-1(p是质数),小于这个质数且与其互质的个数就是p-1: φ(p ...

  7. 主计划MPS禁止改写项目编号(PROJECT)

    应用 Oracle   Manufacturing Planning 层 Level Function 函数名 Funcgtion Name MRPFSDMS-253 表单名 Form Name MR ...

  8. 2-13. 平均两个有序序列(25)(ZJU_PAT 名单 | 排列 )

    主题链接:http://pat.zju.edu.cn/contests/ds/2-13 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0, A1-AN-1的中位 ...

  9. GitHub看板系统(Project)

    /********************************************************************** * GitHub看板系统(Project) * 说明: ...

随机推荐

  1. Linux打包解压

    tar tar命令可以用来压缩打包单文件.多个文件.单个目录.多个目录. 常用格式: 单个文件压缩打包: tar czvf my.tar file1 多个文件压缩打包: tar czvf my.tar ...

  2. C++ String和其他类型互换

    在C++中如何实现String和其他类型互换呢?最好的方式是使用stringstream,下面简单介绍下: 1.其他类型转换为String #include <sstream> strin ...

  3. HTML 的超链接 a 标签中如何设置其宽度和高度?

    HTML 的超链接 a 标签中如何设置其宽度和高度? 在DIV CSS布局中,html 中 a 超链接标签,直接对其设置宽度和高度不能生效,设置宽度和高度也不起作用,这里为大家分享如何实现 a 标签宽 ...

  4. 基于Qt的A*算法可视化分析

    代码地址如下:http://www.demodashi.com/demo/13677.html 需求 之前做过一个无人车需要自主寻找最佳路径,所以研究了相关的寻路算法,最终选择A算法,因为其简单易懂, ...

  5. sharepoint admin svc must be running in order to create deployment timer job 若要创建计时器作业,必须执行SVC

    sharepoint admin svc must be running in order to create deployment timer job 若要创建计时器作业.必须执行SVC       ...

  6. Swift的数组与OC中数组的区别

    相同的值可以多次出现在一个数组的不同位置: Swift中的数组,数据值在被存储进入到某个数组之前类型必须明确,可以显示的类型标注或者类型推断.而且,Swift中的数组不必是对象类型. OC中的NSAr ...

  7. 哪种代理适合用于Web数据采集

    在Web数据采集中为了避免被服务器封锁而通过代理下载的情况很常见.但是,并非所有的代理都适合于Web数据采集.下面是鲲鹏数据的技术人员给出的说明. 根据HTTP代理的匿名性可以将其分为以下几种:   ...

  8. Struts2中防止表单重复提交,global-results定义全局结果处理

    1.在表单中加入<s:token/>标签 2.在动作类中加入token的拦截器 <!--如果单单写 name="token" 会丧失 defaultStack 拦 ...

  9. c++ builder xe2 debug正常 release崩溃 解决一例

    今天修改了以前一个项目的代码,是一个exe程序  C++ builder xe2 编译.以前都是好的.今天改了一下版本号 编译了一下,居然不能用了.直接崩溃 提示内存非法访问.而且显然还没有进入Win ...

  10. Java 连接 Oracle 数据库

    首先要导入ojdbc6.jar 包(放在lib文件夹) 然后需要在数据库建一个student表进行测试: 连接及测试代码: import java.security.interfaces.RSAKey ...