AGC015 C Nuske vs Phantom Thnook(前缀和)
题意
给出一张$n \times m$的网格,其中$1$为蓝点,$2$为白点。
$Q$次询问,每次询问一个子矩阵内蓝点形成的联通块的数量
保证任意联通块内的任意蓝点之间均只有一条路径可达
Sol
mdzz不好好读题目还想做题,。。
题目中说“联通块内的任意点都只有一条路径可达”,不难推断出这是一棵树
因此 联通块个数 = 蓝点的数量 - 蓝点间边的数量
考虑用前缀和维护,点的数量好处理,但是这个边的数量有点麻烦
反正我用一个数组是搞不出来,因为无法判断左右的方向。。
那就行列分别记录一下就可以了。
#include<cstdio>
#include<iostream>
#include<cstring>
#define LL long long
using namespace std;
const int MAXN = ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, M, Q;
char s[MAXN][MAXN];
int P[MAXN][MAXN], R[MAXN][MAXN], L[MAXN][MAXN];
int GetP(int x, int y) {
if(x == || y == ) return ;
return P[x - ][y] + P[x][y - ] - P[x - ][y - ];
}
int GetR(int x, int y) {
if(x == || y == ) return ;
return R[x - ][y] + R[x][y - ] - R[x - ][y - ];
}
int GetL(int x, int y) {
if(x == || y == ) return ;
return L[x - ][y] + L[x][y - ] - L[x - ][y - ];
}
main() {
N = read(); M = read(); Q = read();
for(int i = ; i <= N; i++) {
scanf("%s", s[i] + );
for(int j = ; j <= M; j++) {
P[i][j] = GetP(i, j);
R[i][j] = GetR(i, j);
L[i][j] = GetL(i, j);
if(s[i][j] == '') L[i][j] += (s[i - ][j] == ''),
R[i][j] += (s[i][j - ] == ''),
P[i][j]++;
}
}
/*for(int i = 1; i <= N; i++, puts(""))
for(int j = 1; j <= M; j++)
printf("%d ", L[i][j]);*/
while(Q--) {
int x1 = read(), y1 = read(), x2 = read(), y2 = read();
// printf("%d %d %d %d\n", GetP(x2, y2), GetP(x1 - 1, y2), GetP(x2, y1 - 1), GetP(x1 - 1, y1 - 1));
int ans1 = P[x2][y2] - P[x1 - ][y2] - P[x2][y1 - ] + P[x1 - ][y1 - ];
int ans2 = R[x2][y2] - R[x1 - ][y2] - R[x2][y1] + R[x1 - ][y1];
int ans3 = L[x2][y2] - L[x2][y1 - ] - L[x1][y2] + L[x1][y1 - ];
cout << ans1 - ans2 - ans3 << endl;
}
return ;
}
/*
*/
AGC015 C Nuske vs Phantom Thnook(前缀和)的更多相关文章
- AtCoder:C - Nuske vs Phantom Thnook
C - Nuske vs Phantom Thnook https://agc015.contest.atcoder.jp/tasks/agc015_c 题意: n*m的网格,每个格子可能是蓝色, 可 ...
- Nuske vs Phantom Thnook
Nuske vs Phantom Thnook Time limit : 4sec / Memory limit : 256MB Score : 700 points Problem Statemen ...
- AGC 015C.Nuske vs Phantom Thnook(思路 前缀和)
题目链接 闻本题有格子,且何谓格子也 \(Description\) 给定\(n*m\)的蓝白矩阵,保证蓝格子形成的的同一连通块内,某蓝格子到达另一个蓝格子的路径唯一. \(Q\)次询问.每次询问一个 ...
- AtCoder Grand Contest 015 C - Nuske vs Phantom Thnook
题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_c 题目大意: 现有一个\(N×M\)的矩阵\(S\),若\(S_{i,j}=1\),则该处为 ...
- [agc015c]nuske vs phantom thnook
题意: 有一个n*m的网格图,每个格子是蓝色或白色.四相邻的两个格子连一条边,保证蓝格子构成一个森林. 有q组询问,每次询问给出一个矩形,问矩形内蓝格子组成的联通块个数. $1\leq n,m\leq ...
- Atcoder C - Nuske vs Phantom Thnook(递推+思维)
题目链接:http://agc015.contest.atcoder.jp/tasks/agc015_c 题意:给一个n*m的格,蓝色的组成路径保证不成环,q个询问,计算指定矩形区域内蓝色连通块的个数 ...
- C - Nuske vs Phantom Thnook
题意:n*m矩阵,n,m<=2e3,矩阵中的1能走到相邻4个1上,0代表障碍,若两个1联通 则只有一条路径 q个询问,q<=2e5,每次询问一个子矩阵中有多少个连通分量? 同一个连通分量中 ...
- [NOIP2019模拟赛][AT2381] Nuske vs Phantom Thnook
题目链接 评测姬好快啊(港记号?)暴力40pts变成60pts 因为题目说了保证蓝色点两两之间只有一条路径,所以肯定组成了一棵树,而对于每次询问的x1,y1,x2,y2的子矩阵中就存在着一个森林 不难 ...
- 「AT2381 [AGC015C] Nuske vs Phantom Thnook」
题目大意 给出一个01矩阵,这个矩阵有一个特殊的性质: 对于任意两个 \(1\) 之间最多只有 \(1\) 条由 \(1\) 构成的路径.每次询问给出一个矩形范围,查询在这个范围内的联通快个数. 分析 ...
随机推荐
- [poj3259]Wormholes(spfa判负环)
题意:有向图判负环. 解题关键:spfa算法+hash判负圈. spfa判断负环:若一个点入队次数大于节点数,则存在负环. 两点间如果有最短路,那么每个结点最多经过一次,这条路不超过$n-1$条边. ...
- Servlet包介绍
----------------siwuxie095 首先到 Tomcat 的官网下载 Tomcat 的 API 帮助文档 Tomcat 官网: ...
- linux中历史命令的一点发现
在LINUX中的终端中输入命令之后,这些命令会被存储到一个文件中,在终端中按下 键盘上的向上的箭头就会显示出以前敲击过的命令,最关键的是重起电脑之后依然有效的,这点和 windows上的CMD有着很大 ...
- 转:基于InfluxDB&Grafana的JMeter实时性能测试数据的监控和展示
本文主要讲述如何利用JMeter监听器Backend Listener,配合使用InfluxDB+Grafana展示实时性能测试数据 关于JMeter实时测试数据 JMeter从2.11版本开始,命令 ...
- R: which(查询位置)、%in% (是否存在)、ifelse(判断是否):
################################################### 问题:ifelse.which.%in% 18.4.27 解决方案: > x < ...
- hdu1047
#include<stdio.h>#include<string>#include<iostream>using namespace std; //高精度加法//只 ...
- Java异常处理的10个最佳实践
本文作者: ImportNew - 挖坑的张师傅 未经许可,禁止转载! 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可 ...
- Mysql分片后分页排序拉取数据的方法
高并发大流量的互联网架构,一般通过服务层来访问数据库,随着数据量的增大,数据库需要进行水平切分,分库后将数据分布到不同的数据库实例(甚至物理机器)上,以达到降低数据量,增加实例数的扩容目的. 一旦涉及 ...
- 转:基础篇|PHP如何解决网站大流量和高并发
基础篇 高并发架构基础概念和优化思路 高并发架构相关概念 并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程 ...
- .frm和.ibd恢复数据
昨日晚上开发告诉我不小心truncate两个表的数据,要求还原.结果在阿里云上找到了备份内容,结果是物理备份文件.frm..ibd.心中一万个草泥马啊..没办法,开始还原吧. 1.查看测试机Mysql ...