C - Nuske vs Phantom Thnook

https://agc015.contest.atcoder.jp/tasks/agc015_c

题意:

  n*m的网格,每个格子可能是蓝色, 可能是白色,问一个子矩阵内,蓝色方格的联通块数。

  输入的数据中,保证蓝色点之间只有一条路径(或者没有)。

分析:

  因为任意蓝点之间只有一条路径,如果在相邻的蓝点之间连一条边后,也就是整张图没有环,在一个森林内,求一个些点构成的树的数量。

  结论:联通块数=总节点数-边数。

  因为,没加入一条边,会减少一个联通块,(即减少一棵树),加入了n条,就减去了n个。

代码:

 #include<cstdio>
#include<iostream>
#include<cctype>
using namespace std; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ;
char s[N][N];
int s1[N][N], s2[N][N], s3[N][N]; int main() {
int n = read(), m = read(), Q = read();
for (int i=; i<=n; ++i) scanf("%s",s[i] + );
for (int i=; i<=n; ++i) {
for (int j=; j<=m; ++j) {
s1[i][j] = s1[i - ][j] + s1[i][j - ] - s1[i - ][j - ];
s2[i][j] = s2[i - ][j] + s2[i][j - ] - s2[i - ][j - ];
s3[i][j] = s3[i - ][j] + s3[i][j - ] - s3[i - ][j - ];
if (s[i][j] == '') {
s1[i][j] ++;
if (s[i][j] == s[i - ][j]) s2[i][j] ++;
if (s[i][j] == s[i][j - ]) s3[i][j] ++;
}
}
}
while (Q--) {
int a1 = read(), b1 = read(), a2 = read(), b2 = read();
int t1 = s1[a2][b2] - s1[a2][b1 - ] - s1[a1 - ][b2] + s1[a1 - ][b1 - ];
int t2 = s2[a2][b2] - s2[a2][b1 - ] - s2[a1][b2] + s2[a1][b1 - ];
int t3 = s3[a2][b2] - s3[a2][b1] - s3[a1 - ][b2] + s3[a1 - ][b1];
printf("%d\n",t1 - t2 - t3);
}
return ;
}

AtCoder:C - Nuske vs Phantom Thnook的更多相关文章

  1. Nuske vs Phantom Thnook

    Nuske vs Phantom Thnook Time limit : 4sec / Memory limit : 256MB Score : 700 points Problem Statemen ...

  2. AtCoder Grand Contest 015 C - Nuske vs Phantom Thnook

    题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_c 题目大意: 现有一个\(N×M\)的矩阵\(S\),若\(S_{i,j}=1\),则该处为 ...

  3. Atcoder C - Nuske vs Phantom Thnook(递推+思维)

    题目链接:http://agc015.contest.atcoder.jp/tasks/agc015_c 题意:给一个n*m的格,蓝色的组成路径保证不成环,q个询问,计算指定矩形区域内蓝色连通块的个数 ...

  4. [agc015c]nuske vs phantom thnook

    题意: 有一个n*m的网格图,每个格子是蓝色或白色.四相邻的两个格子连一条边,保证蓝格子构成一个森林. 有q组询问,每次询问给出一个矩形,问矩形内蓝格子组成的联通块个数. $1\leq n,m\leq ...

  5. AGC 015C.Nuske vs Phantom Thnook(思路 前缀和)

    题目链接 闻本题有格子,且何谓格子也 \(Description\) 给定\(n*m\)的蓝白矩阵,保证蓝格子形成的的同一连通块内,某蓝格子到达另一个蓝格子的路径唯一. \(Q\)次询问.每次询问一个 ...

  6. AGC015 C Nuske vs Phantom Thnook(前缀和)

    题意 题目链接 给出一张$n \times m$的网格,其中$1$为蓝点,$2$为白点. $Q$次询问,每次询问一个子矩阵内蓝点形成的联通块的数量 保证任意联通块内的任意蓝点之间均只有一条路径可达 S ...

  7. C - Nuske vs Phantom Thnook

    题意:n*m矩阵,n,m<=2e3,矩阵中的1能走到相邻4个1上,0代表障碍,若两个1联通 则只有一条路径 q个询问,q<=2e5,每次询问一个子矩阵中有多少个连通分量? 同一个连通分量中 ...

  8. [NOIP2019模拟赛][AT2381] Nuske vs Phantom Thnook

    题目链接 评测姬好快啊(港记号?)暴力40pts变成60pts 因为题目说了保证蓝色点两两之间只有一条路径,所以肯定组成了一棵树,而对于每次询问的x1,y1,x2,y2的子矩阵中就存在着一个森林 不难 ...

  9. 「AT2381 [AGC015C] Nuske vs Phantom Thnook」

    题目大意 给出一个01矩阵,这个矩阵有一个特殊的性质: 对于任意两个 \(1\) 之间最多只有 \(1\) 条由 \(1\) 构成的路径.每次询问给出一个矩形范围,查询在这个范围内的联通快个数. 分析 ...

随机推荐

  1. MATLAB入门学习(七)

    开始,线性代数和微积分了,不怕.不怕. 背命令就行了... 线性代数 解线性方程组: Ax=b A是系数矩阵,x未知数,b是列向量 如果有唯一解,直接x=b\A 第二 B=null(A,'r')求Ax ...

  2. 关于Tomcat服务器接收到的请求参数乱码的问题

    我们在编写的Controller 等服务器端的代码时,接受到的请求参数经常会乱码. 解决:在Tomcat 的安装目录下找到conf 文件夹下的server.xml文件用记事本打开. 找到 <Co ...

  3. C/C++心得-理解指针

    上一篇笔者用自己那不是怎么好理解的逻辑介绍了内存和C中的基本数据类型,现在笔者再根据自己重新所学来说说C语言中的指针. 理解指针才能真正的算C语言入门.也许是我大学期间太关注前端UE,也许是当初开始学 ...

  4. [USACO07OPEN]吃饭Dining

    嘟嘟嘟 这应该是网络流入门题之一了,跟教辅的组成这道题很像. 把每一只牛看成书,然后对牛拆点,因为每一只牛只要一份,食物和饮料分别看成练习册和答案. #include<cstdio> #i ...

  5. springboot+mybatis+shiro——登录认证和权限控制

    转载:https://z77z.oschina.io/ 一.引入依赖 shiro-all包含shiro所有的包.shiro-core是核心包.shiro-web是与web整合.shiro-spring ...

  6. [转]order by 1是什么意思?

    ORDER BY 1 表示 所select 的字段按第一个字段排序 ORDER BY ASC应该没有这样写法,ORDER BY 后面不是字段就是数字, 可以ORDER BY 1 ASC 或者ORDER ...

  7. 前端面试题(copy)

    前端开发面试知识点大纲: HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应. Jav ...

  8. C/C++判断文件/文件夹是否存在 转

    一.判断文件夹是否存在:     1.用CreateDirectory(".//FileManege",NULL);如果文件夹FileManege不存在,则创建.     2.或者 ...

  9. String的非空判断、Integer的非空判断、list的大小判断,对象的非空判断

    1.String的非空判断. StringUtils.isNotEmpty(String str); 2.Integer的非空判断. null != Integer ; 3.list的大小判断. li ...

  10. python类的反射使用方法

    曾经,博主的房东养了只金毛叫奶茶,今天就拿它当议题好了. 博主写本文时正在被广州的蚊子围攻. #反射练习 class animal(object): def __init__(self,name,fo ...