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. Android 开发之使用Eclipse Debug调试详解(转)

    转自 http://blog.csdn.net/xys289187120/article/details/6636331 1.在程序中添加一个断点 如果所示:在Eclipse中添加了一个程序断点 在E ...

  2. python小写转大写金额

    python小写转大写金额 摘自:http://shine-it.net/index.php?topic=14575.0 def _rmb_upper(self, value): "&quo ...

  3. RTTI机制与作用(转)

    一.RTTI(Run-Time Type identification),通过运行时类型信息,程序能够使用基类的指针或引用来检查这些指针或引用所指向的对象的实际派生类型.面向对象的编程语言,想C++, ...

  4. 【Python】学习笔记四:数学运算

    python中的加减乘除比其他的语言简单,不需要对其赋值变量 加减乘除 ) #加法 ) #减法 ) #乘法 ) #除法 5.0 ) #乘方 判断 判断返回的是True或者False ) #等于 Tru ...

  5. UE添加鼠标右键打开

    重装了下系统,有一些工具,不用重新安装还是能用的,比如UE.pl/sql,就当是绿色软件了.但是有些在鼠标右键里的功能没有了 ,比如UE的右键打开. 可以这样修改:打开UltraEdit->高级 ...

  6. LaTeX 中插入图片使其紧跟插入的文字之后

    LaTeX 中插入图片使其不跑到每页的开头而紧跟插入的文字之后. 此次建模过程中,遇到的一个比较棘手的问题是: 当插入图片时,图片的位置总是会自动跑到当页(或下一页)的最上方,而不是紧跟在其对应的说明 ...

  7. 模拟循环单击事件实现layout中间panel全屏

    jquery提供了toggle方法 toggle() 方法切换元素的可见状态. 如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素. 语法 $(selector).toggle(spe ...

  8. PHP连接Azure Redis

    概述 Azure Redis缓存基于流行的开源Redis缓存,可以通过各种Redis客户端进行访问,这些客户端适用于许多编程语言.每个客户端有自身的API,用于通过Redis命令调用Redis缓存实例 ...

  9. Atitit.jquery 版本新特性attilax总结

    Atitit.jquery 版本新特性attilax总结 1. Jq1.4 1 2. 1.5 1 3. 1.6 3 4. Jq1.7 3 ⒉提升了事件委派时的性能有了大幅度的提升,尤其是在ie7下: ...

  10. python学习之with...as语句

    python中的with...as...语句类似于try...finally...语句: # -*- coding: utf-8 -*- # """ with...as. ...