BZOJ4079 [Wf2014]Pachinko
完整题面:
设f(i,j)表示路径经过(i,j)这个点的概率,列出方程消元。
但暴力消元的复杂度是$O((nm)^3)$,注意每一次消元只会影响前后m个方程,所以我们可以对于第i行,只存[i-m,i+m]这些系数来进行消元。
时间复杂度$O(nm^3)$
姿势水平UP~
(代码基本抄Claris的)
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#define f(x,y) a[x][y-x+m]
#define eps 1e-12 const int N=,M=,dx[]={-,,,},dy[]={,,-,};
char s[N][M];
int n,m,tt,p[N*M],v[N*M];
double d[],a[N*M][M*],g[N*M]; int main() {
scanf("%d%d",&m,&n);
for(int i=;i<;i++) scanf("%lf",&d[i]),d[i]/=;
for(int i=;i<n;i++) scanf("%s",s[i]);
for(int i=;i<m;i++) if(s[][i]=='.') tt++;
for(int i=;i<n;i++) for(int j=;j<m;j++) if(s[i][j]!='X') {
int o=i*m+j,x,y; f(o,o)=;
if(!i) g[o]=./tt;
for(int k=;k<;k++) {
x=i+dx[k],y=j+dy[k];
if(x<||x>=n||y<||y>=m||s[x][y]=='X') f(o,o)-=d[k];
else if(s[x][y]=='.') f(o,x*m+y)-=d[k^];
}
if(s[i][j]=='T') f(o,o)=;
}
for(int i=;i<n*m;i++) {
int l=max(,i-m),r=min(n*m-,i+m),k=-;
for(int j=l;j<=r;j++) if(!v[j]&&fabs(f(j,i))>eps) {k=j; break;}
p[i]=k; if(~k) v[k]=; else continue;
for(int j=k+,x;j<=r;j++) {
double t=f(j,i)/f(k,i);
for(x=i;x<n*m&&x<=k+m;x++) f(j,x)-=f(k,x)*t;
g[j]-=g[k]*t;
}
}
for(int i=n*m-;~i;i--) if(~p[i]) {
int k=p[i],l=max(,i-m),r=min(n*m-,i+m);
for(int j=l;j<=r;j++) if(j^k) g[k]-=f(k,j)*g[j];
g[k]/=f(k,i);
}
for(int i=;i<n;i++) for(int j=;j<m;j++) if(s[i][j]=='T') printf("%.9f\n",g[p[i*m+j]]);
return ;
}
BZOJ4079 [Wf2014]Pachinko的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [SCOI2015]国旗计划[Wf2014]Surveillance
[SCOI2015]国旗计划 A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这 项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了N名 ...
- BZOJ4083 : [Wf2014]Wire Crossing
WF2014完结撒花~ 首先求出所有线段之间的交点,并在交点之间连边,得到一个平面图. 这个平面图不一定连通,故首先添加辅助线使其连通. 然后求出所有域,在相邻域之间连一条代价为$1$的边. 对起点和 ...
- BZOJ 4078: [Wf2014]Metal Processing Plant
4078: [Wf2014]Metal Processing Plant Time Limit: 100 Sec Memory Limit: 128 MBSubmit: 86 Solved: 20 ...
- BZOJ4078 : [Wf2014]Metal Processing Plant
设$D(A)\leq D(B)$,从小到大枚举$D(A)$,双指针从大到小枚举$D(B)$. 那么对于权值不超过$D(A)$的边,可以忽略. 对于权值介于$(D(A),D(B)]$之间的边,需要满足那 ...
- 【随机化】bzoj4080 [Wf2014]Sensor Network
#include<cstdio> #include<algorithm> #include<cmath> using namespace std; typedef ...
- BZOJ 4078: [Wf2014]Metal Processing Plant [放弃了]
以后再也不做$World Final$的题了................ 还我下午 bzoj上TLE一次后就不敢交了然后去uva交 Claris太神了代码完全看不懂 还有一个代码uva上竟然WA了 ...
- BZOJ4081 : [Wf2014]Skiing
首先将目标点按$y$坐标从小到大排序. 如果加速度为$0$,那么只要贪心走一遍即可. 否则考虑DP,设$f[i][j]$表示从$i$点以速度$j$出发最多能经过多少个点. 注意到将DP值相同的合并可以 ...
- BZOJ4077 : [Wf2014]Messenger
二分答案,让$A$推迟出发$mid$的时间. 对于每个相邻的时间区间,两个点都是做匀速直线运动. 以$A$为参照物,那么$A$不动,$B$作匀速直线运动. 若线段$B$到$A$的距离不超过$mid$, ...
随机推荐
- MongoDb进阶实践之三 MongoDB查询命令详述
一.引言 上一篇文章我们已经介绍了MongoDB数据库的最基本操作,包括数据库的创建.使用和删除数据库,文档的操作也涉及到了文档的创建.删除.更新和查询,当然也包括集合的创建.重命 ...
- HDFS文件读写操作(基础基础超基础)
环境 OS: Ubuntu 16.04 64-Bit JDK: 1.7.0_80 64-Bit Hadoop: 2.6.5 原理 <权威指南>有两张图,下次po上来好好聊一下 实测 读操作 ...
- 不允许用(a+b)/2这种方式求两个数的均值;如下程序在Linux和32位集成开发环境中运行
#define MAX(a,b) ((a)>(b)?(a):(b)) #include<stdio.h> int main() { int a = 10; int b = 20; i ...
- SQL Server(MySql)中的联合主键(联合索引) 索引分析
最近有人问到这个问题,之前也一直没有深究联合索引具体使用逻辑,查阅多篇文章,并经过测试,得出一些结论 测试环境:SQL Server 2008 R2 测试结果与MySql联合索引查询机制类似,可以认为 ...
- 新概念英语(1-109)A Good Idea
Lesson 109 A good idea 好主意 Listen to the tape then answer this question. What does Jane have with he ...
- ELK学习总结(3-1)elk的基本查询
基本查询:内置条件 组合查询:组合基本查询 过滤:查询同时,通过filter筛选数据 准备工作 GET /library/books/_mget { "ids":["1 ...
- Spring Security入门(3-3)Spring Security 手工配置并注入 authenticationProvider 和 异常信息传递
特别注意的是 这样就能保证抛出UsernameNotFoundException时,前台显示出错信息: 另外,ps:
- Spring中获取request的几种方法,及其线程安全性分析
前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性. 原创不易,如果觉得文章对你有帮助,欢迎点赞.评论.文章有疏漏之处,欢迎批评指正. 欢迎 ...
- ubuntu下创建python的虚拟环境
当我们在同一个机器上进行开发多个项目,每个项目于用到包的不同版本的时候,就很尴尬. 安装python包的命令是: sudo pip install 包名 这样的话,会将包安装到/usr/local/l ...
- *args和**kwargs
#coding=utf8 __author__ = 'Administrator' # 当函数的参数不确定时,可以使用*args和**kwargs.*args没有key值,**kwargs有key值 ...