Flea Circus(Project Euler 213)
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)的更多相关文章
- 微信公众平台java开发具体解释(project代码+解析)
说明: 本次的教程主要是对微信公众平台开发人员模式的解说,网络上非常多类似文章,但非常多都让初学微信开发的人一头雾水,所以总结自己的微信开发经验,将微信开发的整个过程系统的列出,并对主要代码进行解说分 ...
- 项目启动会(project initiating meeting)与项目开工会(kick-off meeting)区别
一.项目启动会initiating meeting 召开时间:是启动阶段结束时召开的会议:主要任务:发布项目章程,并任命项目经理,赋予项目经理动用组织资源的权力:注意事项:(1)会议召开前已经对干系人 ...
- 软件项目量化管理(CMMI高成熟度)实践经验谈——之项目管理过程策划篇
续:软件项目量化管理(CMMI高成熟度)实践经验谈--之概述篇 二.项目管理过程 软件开发项目管理过程,从项目全视角来看,分为售前.售中.售后等三个大的阶段.本文所谈的是售中阶段项目管理过程,在售中阶 ...
- PMP十五至尊图(第六版)
PMP(Project Management Professinoal)项目经理专业资格认证,由美国项目管理学会PMI(Project Management Institute)发起并组织的一种资格认 ...
- 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. ...
- HDU2824 The Euler function(欧拉函数)
题目求φ(a)+φ(a+1)+...+φ(b-1)+φ(b). 用欧拉筛选法O(n)计算出n以内的φ值,存个前缀和即可. φ(p)=p-1(p是质数),小于这个质数且与其互质的个数就是p-1: φ(p ...
- 主计划MPS禁止改写项目编号(PROJECT)
应用 Oracle Manufacturing Planning 层 Level Function 函数名 Funcgtion Name MRPFSDMS-253 表单名 Form Name MR ...
- 2-13. 平均两个有序序列(25)(ZJU_PAT 名单 | 排列 )
主题链接:http://pat.zju.edu.cn/contests/ds/2-13 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0, A1-AN-1的中位 ...
- GitHub看板系统(Project)
/********************************************************************** * GitHub看板系统(Project) * 说明: ...
随机推荐
- Sketch 介绍
Sketch 插件大集合 -- Using Sketch Like A BOSS 这几天发现了一个叫做 Sketch Toolbox 的 Mac 应用,简直是下载和安装 Sketch 插件 ...
- 使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度
使用PHP和GZip压缩网站JS/CSS文件加速网站访问速度 一些泛WEB 2.0网站为了追求用户体验,可能会大量使用CSS和JS文件.这就导致在服务器带宽一定的情况下,多用户并发访问速度变慢.如何加 ...
- DRUPAL性能优化【转】
1.启用memcache代替Mysql的缓存表处理缓存数据. 2.添加一个opcode缓存可以让 PHP能够重用前面编译过的代码,这样就会跳过解析和编译.常见的opcode缓存有Alternative ...
- Drupal与其它开源系统的整合
网上看到一篇介绍Drupal与phpbb整合的文章.浏览了一下,真心地不错.于是就想将与整合有关的文章做一个汇总,以备不时之需: Drupal7整合PHPBB论坛 Drupal 7 整合 Vanill ...
- (一)Lucene——基本概念介绍
1. Lucene是什么 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能.Lucene 目前是 Apache Jakart ...
- Spring+Hibernate整合
因为整合spring和hibernate所以,需要用到spring里面复写Hibernate的类以有DI和IOC特性 db.sql hibernate_basic数据库 表 person 字段 pid ...
- Java教程到处都是,究竟怎样能学好Java?
学习Java如何入门?学习教程要点是什么?如何精通?做好以下这些点,入门更快,掌握Java更轻松. Java必备基础知识 1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EE ...
- php fpm安装curl后,nginx出现connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied)的错误
这里选择直接apt-get安装,因为比起自己编译简单多了,不需要自己配置什么 #sudo apt-get install curl libcurl3 libcurl3-dev php5-curl 安装 ...
- linux下各种形式的shell加法操作总结
linux 下shell加法操作总结: #!/bin/bash n=1;echo -n "$n " let "n = $n + 1" echo -n & ...
- 基于DDD的.NET开发框架-DDD经典分层
DDD核心思想是由业务问题来控制解决方案的形式从以数据库为中心过渡到领域模型为中心 下面这个图是我在<领域驱动设计与模式实战>书中拍下来的,他完全诠释DDD的经典分层. 程序代码中也是响应 ...