https://nanti.jisuanke.com/t/30991

题意

一个n*m的方格矩阵,有的格子被涂成了黑色,问该矩阵中有多少个子矩阵,子矩阵不包含黑色格子。

分析

参考https://blog.csdn.net/Sirius_han/article/details/82313029

n=1e5,m=100。首先思考一下没有黑点的话,子矩阵总数怎么算。

现有长为L的大矩阵,对于固定高度h,其子矩阵的个数是这样计算的

for(int i=; i<=L; i++){
for(int j=i; j>; j--){
count+=h;
}
}

那么对于不同高度,只需要再加一维循环就好。

解决有黑点的问题,当存在黑点时

先看高为H(4)的子矩阵个数:以(4, 7)为右下角的高为H的子矩阵个数为3个,由L=4处再向左,就只能构成高为2的子矩阵了;

那么怎么该上边的代码才能得出答案呢?如下:

for(int i=; i<=H; i++){
for(int j=; j<=L; j++){
h=i;
for(int k=j; k>; k--){
h=min(h, i-p[k]);
count+=h;
}
}
}
//p[k]表示第k列中在i行上边的第一个黑点的位置,

那么维护p数组就是这题的重点了

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int b[][], up[];
int main(){
int T, cas=;
scanf("%d", &T);
while(T--){
int n, m, K;
scanf("%d%d%d", &n, &m, &K);
for(int i=; i<=n; i++){
for(int j=; j<=m; j++){
b[i][j]=;
up[j]=;
}
}
for(int i=; i<K; i++){
int x, y;
scanf("%d%d", &x, &y);
b[x][y]=;
}
ll ans=;
for(int i=; i<=n; i++){
for(int j=; j<=m; j++){
if(b[i][j]){
up[j]=i;
}
}
for(int j=; j<=m; j++){
ll minn=0x7f7f7f7f7f7f7f7f;
for(int k=j; k>; k--){
minn=min(minn, (ll)(i-up[k]));
ans+=minn;
}
}
}
printf("Case #%d: %lld\n", ++cas, ans);
}
return ;
}

 

  1. #include <bits/stdc++.h>
  2.  
    using namespace std;
  3.  
    typedef long long ll;
  4.  
    int b[100010][110], up[110];
  5.  
    int main(){
  6.  
    int T, cas=0;
  7.  
    scanf("%d", &T);
  8.  
    while(T--){
  9.  
    int n, m, K;
  10.  
    scanf("%d%d%d", &n, &m, &K);
  11.  
    for(int i=0; i<=n; i++){
  12.  
    for(int j=0; j<=m; j++){
  13.  
    b[i][j]=0;
  14.  
    up[j]=0;
  15.  
    }
  16.  
    }
  17.  
    for(int i=0; i<K; i++){
  18.  
    int x, y;
  19.  
    scanf("%d%d", &x, &y);
  20.  
    b[x][y]=1;
  21.  
    }
  22.  
    ll ans=0;
  23.  
    for(int i=1; i<=n; i++){
  24.  
    for(int j=1; j<=m; j++){
  25.  
    if(b[i][j]){
  26.  
    up[j]=i;
  27.  
    }
  28.  
    }
  29.  
    for(int j=1; j<=m; j++){
  30.  
    ll minn=0x7f7f7f7f7f7f7f7f;
  31.  
    for(int k=j; k>0; k--){
  32.  
    minn=min(minn, (ll)(i-up[k]));
  33.  
    ans+=minn;
  34.  
    }
  35.  
    }
  36.  
    }
  37.  
    printf("Case #%d: %lld\n", ++cas, ans);
  38.  
    }
  39.  
    return 0;
  40.  
    }

ACM-ICPC 2018 南京赛区网络预赛 B The writing on the wall(思维)的更多相关文章

  1. ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall

    题目链接:https://nanti.jisuanke.com/t/30991 2000ms 262144K   Feeling hungry, a cute hamster decides to o ...

  2. ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall (暴力)

    题意:一个n*m的方格矩阵,有的格子被涂成了黑色,问该矩阵中有多少个子矩阵,子矩阵不包含黑色格子; 思路:对于一个长为L, 高为H的无黑点矩阵中包含的高为H的子矩阵个数为L+(L-1)+(L-2)+. ...

  3. ACM-ICPC 2018 南京赛区网络预赛 J.sum

    A square-free integer is an integer which is indivisible by any square number except 11. For example ...

  4. ACM-ICPC 2018 南京赛区网络预赛 E题

    ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...

  5. ACM-ICPC 2018 南京赛区网络预赛B

    题目链接:https://nanti.jisuanke.com/t/30991 Feeling hungry, a cute hamster decides to order some take-aw ...

  6. 计蒜客 30999.Sum-筛无平方因数的数 (ACM-ICPC 2018 南京赛区网络预赛 J)

    J. Sum 26.87% 1000ms 512000K   A square-free integer is an integer which is indivisible by any squar ...

  7. 计蒜客 30996.Lpl and Energy-saving Lamps-线段树(区间满足条件最靠左的值) (ACM-ICPC 2018 南京赛区网络预赛 G)

    G. Lpl and Energy-saving Lamps 42.07% 1000ms 65536K   During tea-drinking, princess, amongst other t ...

  8. 计蒜客 30990.An Olympian Math Problem-数学公式题 (ACM-ICPC 2018 南京赛区网络预赛 A)

    A. An Olympian Math Problem 54.28% 1000ms 65536K   Alice, a student of grade 66, is thinking about a ...

  9. ACM-ICPC 2018 南京赛区网络预赛

    轻轻松松也能拿到区域赛名额,CCPC真的好难 An Olympian Math Problem 问答 只看题面 54.76% 1000ms 65536K   Alice, a student of g ...

随机推荐

  1. FPGA笔试题集锦(血的教训)

    1.名词解释: FPGA:现场可编程门阵列,一般工艺SRAM(易失性),所以要外挂配置芯片. CPLD:复杂可编程逻辑器件,一般工艺Flash(不易失). ASIC:专用集成电路 SOC:片上系统 S ...

  2. 【BZOJ1426】收集邮票 期望DP

    题目大意 有\(n\)种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且买到的邮票究竟是\(n\)种邮票中的哪一种是等概率的,概率均为\(\frac{1} ...

  3. google 搜索关键字技巧

    google 搜索关键字技巧 来源  https://www.cnblogs.com/qiudabai/articles/9143328.html inurl: 用于搜索网页上包含的URL. 这个语法 ...

  4. Nifi 模板

        Acqusition_and_Processing.xml Moving templates to own directory to make repo cleaner   CADF_Pars ...

  5. Haunted Graveyard ZOJ - 3391(SPFA)

    从点(n,1)到点(1,m)的最短路径,可以转换地图成从(1,1)到(n,m)的最短路,因为有负权回路,所以要用spfa来判负环, 注意一下如果负环把终点包围在内的话, 如果用负环的话会输出无穷,但是 ...

  6. Python之面向对象编程学习

    不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...

  7. Python学习day2 while循环&格式化输出&运算符

    day2 运算符-while循环 1.while循环 while循环基本结构; while 条件:      结果    # 如果条件为真,那么循环则执行    # 如果条件为假,那么循环不执行 de ...

  8. django(六)之ORM数据库操作

    https://www.cnblogs.com/haiyan123/p/7732190.html 一.ORM介绍 ORM——object relation mapping 映射关系: 表名 ----- ...

  9. 斯坦福大学公开课机器学习: machine learning system design | prioritizing what to work on : spam classification example(设计复杂机器学习系统的主要问题及构建复杂的机器学习系统的建议)

    当我们在进行机器学习时着重要考虑什么问题.以垃圾邮件分类为例子.假如你想建立一个垃圾邮件分类器,看这些垃圾邮件与非垃圾邮件的例子.左边这封邮件想向你推销东西.注意这封垃圾邮件有意的拼错一些单词,就像M ...

  10. 第十四节,卷积神经网络之经典网络Inception(四)

    一 1x1卷积 在架构内容设计方面,其中一个比较有帮助的想法是使用 1×1 卷积.也许你会好奇,1×1 的卷积能做什么呢?不就是乘以数字么?听上去挺好笑的,结果并非如此,我们来具体看看. 过滤器为 1 ...