说实话不是很懂按题解怎么写,思路来源于 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的更多相关文章

  1. hdu 6052 To my boyfriend

    题目 OvO click here http://acm.hdu.edu.cn/showproblem.php?pid=6052 (2017 Multi-University Training Con ...

  2. HDU 6052 To my boyfriend(概率 贡献)

    To my boyfriend Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  3. 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两节 ...

  4. HDU 6052 To my boyfriend(悬线法)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6052 [题目大意] 给出一个数字矩阵,求子矩阵期望数字种数 [题解] 我们统计[x,y]为其所表示 ...

  5. 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: ...

  6. HDU 6052 To my boyfriend(容斥+单调栈)

    题意:对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望. 思路: 啊啊啊啊啊,补了两天,总算A了这道题了,简直石乐志,前面的容斥还比较好写,后面的那个>13那个 ...

  7. 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之后不可以再离开. ...

  8. 2017 Wuhan University Programming Contest (Online Round) C. Divide by Six 分析+模拟

    /** 题目:C. Divide by Six 链接:https://oj.ejq.me/problem/24 题意:给定一个数,这个数位数达到1e5,可能存在前导0.问为了使这个数是6的倍数,且没有 ...

  9. 2017 Wuhan University Programming Contest (Online Round) B Color 树形dp求染色方法数

    /** 题目:Color 链接:https://oj.ejq.me/problem/23 题意:给定一颗树,将树上的点最多染成m种颜色,有些节点不可以染成某些颜色.相邻节点颜色不同.求染色方法数. 思 ...

随机推荐

  1. oracle-function-into时为null报错

    oracle-function-into时为null报错 create or replace function P_ADD_CUSTOMER_FOR_CSS_heyt_test(i_cust_name ...

  2. 【AtCoder】AGC007

    AGC007 A - Shik and Stone 如果i + j走过的格子只有一个,那么就是可以走到 #include <bits/stdc++.h> #define fi first ...

  3. 19牛客暑期多校 round2 H 01矩阵内第二大矩形

    题目传送门//res tp nowcoder 目的 给定n*m 01矩阵,求矩阵内第二大矩形 分析 O(nm)预处理01矩阵为n个直方图,问题转换为求n个直方图中的第二大矩形.单调栈计算,同时维护前二 ...

  4. Docker 镜像的制作

        1.登录docker            docker ecex –it 容器名/容器id /bin/bash        例如:            docker exec –it t ...

  5. 10.使用du将文件按大小进行排序

    按G进行排序du -sh * | grep G | sort -nr

  6. Docker学习+遇坑笔记

    基础命令: 1.Docker启动:docker-machine start default 2.Docker关闭:  docker-machine stop default 3.查看当前运行的Dock ...

  7. TCP面向字节流和UDP面向报文的区别

    TCP面向字节流 打个比方比喻TCP,你家里有个蓄水池,你可以里面倒水,蓄水池上有个龙头,你可以通过龙头将水池里的水放出来,然后用各种各样的容器装(杯子.矿泉水瓶.锅碗瓢盆)接水. 上面的例子中,往水 ...

  8. 在Android8.0以上收不到广播问题(AppWidget)

    对Intent指定组件 //安卓8.0必须添加 intent.setComponent(new ComponentName(context,MyAppWidgetProvider.class)); 问 ...

  9. 9.Spring整合Hibernate_2_声明式的事务管理(Xml的方式)

    使用xml的方式进行声明式的事务管理 推荐使用xml的方式,因为可以同时为多个方法进行声明 <!-- 开启Spring中的事务管理(声明式的事务管理) xml--> <!-- 不管是 ...

  10. Django 开发相关知识 整理

    前言 前端ajax HTTP请求头 ajax上传文件 jsonp跨域 URL 设计 分发 url参数编码 反向生成url 视图 request对象 POST url信息 视图返回值 HttpRespo ...