HDU 6052 - To my boyfriend | 2017 Multi-University Training Contest 2
说实话不是很懂按题解怎么写,思路来源于 http://blog.csdn.net/calabash_boy/article/details/76272704?yyue=a21bo.50862.201879
写起来倒是挺短的。
/*
HDU 6052 - To my boyfriend [ 分析,期望 ] | 2017 Multi-University Training Contest 2
题意:
给出一个N*M的数字矩阵
求子矩阵的不同数字的个数的期望
限制 N,M <= 100
分析:
统计单点对答案的贡献
先定一个统计标准,比如:某种颜色对于某个矩阵的贡献由该矩阵中最右上方(先上后右)的该颜色的点所贡献
则单点对答案的贡献则为它所在的矩阵中 它是该颜色最右上方的那个点 的矩阵的数量
枚举单点复杂度O(n^2),则我们需要在O(n)的时间内求出贡献 设矩阵形式为 [h,w]*[l,r],则对于某点(x,y),至少要求 h <= x, w >= x, l <= y, r >= y
对于下边界 w ,可发现没有限制,取值范围为 [x,n]
对于上边界 h ,为该列上与(x,y)颜色相同的上一个节点
对于左右边界 l,r,可发现其与上边界相关:当取上边界为h时,要求 [h,x+1] * [l,r] 中不包含同颜色的点
还可以发现,随着h的减小,l单调递增,r单调递减
即同一列只有最下边一个点有用
故可以先处理出每一个 h 对应的 l,r 的最小(最大)值,O(n) 枚举上边界 h (或者在枚举的时候O(1)更新) 具体做法是维护每种颜色的每一列的最下面的点的行号
*/
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 10005;
int row[N][105];
int l[105], r[105];
int t, n, m;
LL ans;
void solve(int x, int y, int c)
{
int i, h;
for (i = 1; i <= x; i++) l[i] = 0, r[i] = m+1;
for (i = 1; i < y; i++) l[row[c][i]] = i;
for (i = m; i > y; i--) r[row[c][i]] = i;
h = row[c][y];
for (i = x-1; i > h; i--)
l[i] = max(l[i], l[i+1]), r[i] = min(r[i], r[i+1]);
for (i = x; i > h; i--)
ans += (LL)(r[i]-y) * (y-l[i]) * (n-x+1);
}
int main()
{
int i, j, col;
scanf("%d", &t);
while (t--)
{
memset(row, 0, sizeof(row));
scanf("%d%d", &n, &m);
ans = 0;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
{
scanf("%d", &col);
solve(i, j, col);
row[col][j] = i;
}
LL all = (LL)n*(n+1)/2*m*(m+1)/2;
printf("%.9f\n", (double)ans/all);
}
}
HDU 6052 - To my boyfriend | 2017 Multi-University Training Contest 2的更多相关文章
- hdu 6052 To my boyfriend
题目 OvO click here http://acm.hdu.edu.cn/showproblem.php?pid=6052 (2017 Multi-University Training Con ...
- HDU 6052 To my boyfriend(概率 贡献)
To my boyfriend Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 6162 - Ch’s gift | 2017 ZJUT Multi-University Training 9
/* HDU 6162 - Ch’s gift [ LCA,线段树 ] | 2017 ZJUT Multi-University Training 9 题意: N节点的树,Q组询问 每次询问s,t两节 ...
- HDU 6052 To my boyfriend(悬线法)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6052 [题目大意] 给出一个数字矩阵,求子矩阵期望数字种数 [题解] 我们统计[x,y]为其所表示 ...
- 2017ACM暑期多校联合训练 - Team 2 1008 HDU 6052 To my boyfriend (数学 模拟)
题目链接 Problem Description Dear Liao I never forget the moment I met with you. You carefully asked me: ...
- HDU 6052 To my boyfriend(容斥+单调栈)
题意:对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望. 思路: 啊啊啊啊啊,补了两天,总算A了这道题了,简直石乐志,前面的容斥还比较好写,后面的那个>13那个 ...
- 2017 Wuhan University Programming Contest (Online Round) Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。
/** 题目:Lost in WHU 链接:https://oj.ejq.me/problem/26 题意:一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开. ...
- 2017 Wuhan University Programming Contest (Online Round) C. Divide by Six 分析+模拟
/** 题目:C. Divide by Six 链接:https://oj.ejq.me/problem/24 题意:给定一个数,这个数位数达到1e5,可能存在前导0.问为了使这个数是6的倍数,且没有 ...
- 2017 Wuhan University Programming Contest (Online Round) B Color 树形dp求染色方法数
/** 题目:Color 链接:https://oj.ejq.me/problem/23 题意:给定一颗树,将树上的点最多染成m种颜色,有些节点不可以染成某些颜色.相邻节点颜色不同.求染色方法数. 思 ...
随机推荐
- InnoDB 中的锁实现
InnoDB 中的锁实现 原贴:InnoDB 锁系统及死锁检测实现分析 InnoDB 中,所有事务加的行锁通过一个全局的 hash 表 lock_sys 维护: /* The lock system ...
- # 双值Hash
双值Hash 简单介绍 Hash的应用:Hash其实就像一个加密过程,很多加密算法都会用到Hash,像GitHub中生成的token值也是Hash的结果. Hash冲突:简单来说就是不同的数映射到了同 ...
- nginx核心模块常用指令
默认启动Nginx时,使用的配置文件是: 安装路径/conf/nginx.conf 文件,可以在启动nginx的时候,通过-c来指定要读取的配置文件 常见的配置文件有如下几个: nginx.conf: ...
- hdu 1269 入手强连通
思路待整理 #include<cstdio> #include<iostream> #include<cstring> #include<vector> ...
- hive面试题(免费拿走不谢)
Hive 最常见的几个面试题 1.hive 的使用, 内外部表的区别,分区作用, UDF 和 Hive 优化(1)hive 使用:仓库.工具(2)hive 内部表:加载数据到 hive 所在的 hdf ...
- 使用Vue CLI脚手架搭建vue项目
本次是使用@vue/cli 3.11.0版本搭建的vue项目 1. 首先确保自己的电脑上的Node.js的版本是8.9版本或者以上 2. 全局安装vue/cli npm install @vue/cl ...
- html5中本地存储概念是什么?
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage.sessionStorage用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页 ...
- git 分布式版本控制
一.git版本控制 管理文件夹 安装省略 1. 进入要管理的文件夹 2. 初始化 (提名) 3. 管理 4. 生成版本 对应的命令: # 进入文件夹以后 右击选git bash here #初始化 g ...
- host缓存,浏览器缓存---解决host缓存带来的伤
1.缓存 缓存,对应工程师来讲简直太熟悉了,太方便了,省略到资源或数据的获取方式,直接缓存到离用户访问最快的地方,也降低服务器的压力,比如: (1)静态文件获取 服务器->cdn->本地磁 ...
- 内核开机logo
安装 # sudo apt-getinstall netpbm 制图 # bmptoppm logo.bmp > logo.ppm # ppmquant 224 logo.ppm > lo ...