小Y的棋盘问题 题解
有一个n*m的棋盘,上面有一些棋子,每行每列最多只会有一个棋子,不会有两个棋子八连通。问随机一个空格子作为起点,再随机地选择一个空格子作为终点,求问不经过任意棋子最短路的期望长度是多少。多组,n,m<=2000。
首先答案分子显然是所有点对距离之和,分母就是不是棋子的位置个数的平方。
假装没有棋子,那么距离就是曼哈顿距离了。那么我们可以考虑将x项和y项分开统计,所以只要按x、y坐标顺序枚举点即可。
现在有了棋子,我们考虑哪些东西会受到影响。
①同一行/同一列的被棋子隔开,这样肯定距离要加2。
②那不是同一行,同一列呢?
经过一番思考,我们可以发现对于一个蓝色位置的格子,只有红色位置的格子到这个点距离要加2。

我来解释一下...就是说首先要是连续的一串列都有障碍,然后障碍的位置还要是单调的。
这样我们就模拟一下就行了。似乎也不是特别难写。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define S 1004
int T,n,m,hang[S],lie[S];
typedef long long ll;
char cs[S][S];
void sol()
{
memset(hang,0,sizeof(hang));
memset(lie,0,sizeof(lie));
ll cnt=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",cs[i]+1);
for(int j=1;j<=m;j++)
{
if(cs[i][j]=='G') hang[i]=j, lie[j]=i;
else ++cnt;
}
}
long long sum=0;
//hang
{
long long s=0,c=0;
for(int i=1;i<=n;i++)
{
long long cur=m-(bool)hang[i];
sum+=(i*c-s)*cur;
s+=i*cur; c+=cur;
}
}
//lie
{
long long s=0,c=0;
for(int j=1;j<=m;j++)
{
long long cur=n-(bool)lie[j];
sum+=(j*c-s)*cur;
s+=j*cur; c+=cur;
}
}
for(int i=1;i<=n;i++)
if(hang[i]) sum+=(hang[i]-1)*(ll)(m-hang[i])*2;
for(int i=1;i<=m;i++)
if(lie[i]) sum+=(lie[i]-1)*(ll)(n-lie[i])*2;
//hang
{
for(int s=0;s<=1;s++)
{
long long ss=0;
for(int i=1;i<=n;i++)
{
if(!hang[i]) {ss=0; continue;}
if(hang[i-1]&&(hang[i]>hang[i-1])==s)
sum+=ss*((!s)?(hang[i]-1):(m-hang[i]));
else
ss=0;
ss+=((s)?(hang[i]-1):(m-hang[i]))*2;
}
}
}
//lie
{
for(int s=0;s<=1;s++)
{
long long ss=0;
for(int i=1;i<=m;i++)
{
if(!lie[i]) {ss=0; continue;}
if(lie[i-1]&&(lie[i]>lie[i-1])==s)
sum+=ss*((!s)?(lie[i]-1):(n-lie[i]));
else
ss=0;
ss+=((s)?(lie[i]-1):(n-lie[i]))*2;
}
}
}
cnt*=cnt; sum*=2;
printf("%.4lf\n",sum/(double)cnt);
}
int main()
{
freopen("chess.in","r",stdin);
freopen("chess.out","w",stdout);
scanf("%d",&T);
while(T--) sol();
}
小Y的棋盘问题 题解的更多相关文章
- 【贪心】小Y的炮[cannon]题解
模拟赛的题目,做的时候由于第二题表打太久了,只剩下40分钟,想都没想就写了一个爆搜20分... 这道题单调性很关键,下面会解释 P.S.解释在代码里 #include<cstdio> #i ...
- 【luogu P4007 清华集训2017】小Y和恐怖奴隶主
题目背景 “A fight? Count me in!” 要打架了,算我一个. “Everyone, get in here!” 所有人,都过来! 题目描述 小 Y 是一个喜欢玩游戏的 OIer.一天 ...
- 【luoguP4006 清华集训2017】小Y和二叉树
题目描述 小 Y 是一个心灵手巧的 OIer,她有许多二叉树模型. 小 Y 的二叉树模型中,每个结点都具有一个编号,小 Y 把她最喜欢的一个二叉树模型挂在了墙上,树根在最上面,左右子树分别在树根的左下 ...
- 【luogu P4005 清华集训2017】小Y和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
- BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs
BZOJ_4813_[Cqoi2017]小Q的棋盘_dfs Description 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能 在有连线的格 ...
- 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)
[UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...
- 【BZOJ4813】[CQOI2017]小Q的棋盘(贪心)
[BZOJ4813][CQOI2017]小Q的棋盘(贪心) 题面 BZOJ 洛谷 题解 果然是老年选手了,这种题都不会做了.... 先想想一个点如果被访问过只有两种情况,第一种是进入了这个点所在的子树 ...
- 【LOJ6089】小Y的背包计数问题(动态规划)
[LOJ6089]小Y的背包计数问题(动态规划) 题面 LOJ 题解 神仙题啊. 我们分开考虑不同的物品,按照编号与\(\sqrt n\)的关系分类. 第一类:\(i\le \sqrt n\) 即需要 ...
- 【洛谷4005】小Y和地铁(搜索)
[洛谷4005]小Y和地铁(搜索) 题面 洛谷 有点长. 题解 首先对于需要被链接的两个点,样例中间基本上把所有的情况都给出来了. 但是还缺了一种从下面绕道左边在从整个上面跨过去在从右边绕到下面来的情 ...
随机推荐
- run() 和 start() 的区别
1) start: 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面(指主线程下面)的代码.通过调用Thread类的start()方法来启动一个 ...
- iOS如何获取网络图片(三)有沙盒的
沙盒 沙盒简介 默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.因为应用的沙盒机制,应用只能在几个目录下读写文件 Documents:苹果建议将程序中建立的或在程 ...
- android Gui系统之WMS(1)----window flags & view flags
SurfaceFlinger 前面说的,就是一个surface的合成.SurfaceFlinger就是一个默默的记录着,它不会对surface的内容有什么改动. WMS(WindowsManagerS ...
- VS2015 Git 插件使用教程
VS2015 中继承了 Git 插件,再也不用下载 Github for Windows了. 从 团队-管理连接 中打开 团队资源管理器 克隆Repository 在 本地 Git 存储库下面点击 ...
- PHP implode() 函数 把数组元素组合为字符串
http://www.w3school.com.cn/php/func_string_implode.asp PHP implode() 函数 PHP String 函数 实例 把数组元素组合为字符串 ...
- 挖一挖C#中那些我们不常用的东西之系列(3)——StackTrace,Trim
时间太快了,三月又要过去了,告别一下...继续期待生死未卜的四月,今天我们继续挖一挖. 一: Environment.StackTrace 可能我们看到最多的就是catch中的e参数,里面会有一个St ...
- js相对路径相关(比如:js中的路径依赖导入该js文件的路径)
问题描述: 前几天调用同事的js接口文件,在他自己的html测试页面ok,在我这边调用时出现问题. debug过程中,将该测试html移到其他位置都不行,放到原html测试页面同层次路径下是OK的. ...
- Ambari工具之认识学习01
随着大数据的越发流行,大大小小的互联网公司都开始参与一些大数据相关的业务,都想从中分一杯羹.Hadoop是大数据的典型代表,也可以说现在的领头大哥,很多互联网巨头都在使用hadoop,包括BAT等大公 ...
- tools:context=".MainActivity的作用(转)
android:layout_width="match_parent" android:layout_height="match_parent" android ...
- python class对象转换成json/字典
# -*- encoding: UTF-8 -*- class Student: name = '' age = 0 def __init__(self, name, age): self.name ...