hdu 5480 Conturbatio
2015-10-05 11:42
399 查看
问题描述
输入描述
输出描述
输入样例
输出样例
[/code]
在一个nmn×m的国际象棋棋盘上有很多车(Rook),其中车可以攻击他所属的一行或一列,包括它自己所在的位置。 现在还有很多询问,每次询问给定一个棋盘内部的矩形,问矩形内部的所有格子是否都被车攻击到?
输入描述
输入文件包含多组数据,第一行为数据组数TT。 每组数据有4个正整数nmKQn,m,K,Q。 KK为车的数量,QQ为询问的个数。 接下来有KK行,每行两个整数xyx,y , 表示车所在的坐标。 再接下来有QQ行,每行4个整数x1y1x2y2x1,y1,x2,y2,表示询问的矩形的左下角与右上角的坐标。 1nmKQ1000001≤n,m,K,Q≤100,000. 1xn1ym1≤x≤n,1≤y≤m. 1x1x2n1y1y2m1≤x1≤x2≤n,1≤y1≤y2≤m.
输出描述
对于每组询问,输出Yes或No。
输入样例
2 2 2 1 2 1 1 1 1 1 2 2 1 2 2 2 2 2 1 1 1 1 2 2 1 2 2
输出样例
Yes No Yes
一个矩形要被全部攻击到要么所有列都有车要么所有行都有车,记录一下每列每行是否有车,算下前缀和。
#include <cstdio> #include <cstring> using namespace std; const int N = 1e5 + 10; int row , col ; int n, m, k, q, t; int main() { scanf("%d", &t); while (t--) { memset(row, 0, sizeof(row)); memset(col, 0, sizeof(col)); scanf("%d%d%d%d", &n, &m, &k, &q); int x, y, x1, y1, x2, y2; for (int i = 1; i <= k; i++) { scanf("%d%d", &x, &y); row[x] = col[y] = 1; } for (int i = 2; i <= n; i++) row[i] += row[i - 1]; for (int i = 2; i <= m; i++) col[i] += col[i - 1]; for (int i = 1; i <= q; i++) { scanf("%d%d%d%d", &x1, &y1, &x2, &y2); if ((y2 - y1 + 1) == (col[y2] - col[y1 - 1])) printf("Yes\n"); else if ((x2 - x1 + 1) == (row[x2] - row[x1 - 1])) printf("Yes\n"); else printf("No\n"); } } return 0; }
[/code]
相关文章推荐
- 1272:小希的迷宫
- vmware workstation12 pro
- Building for UN
- sublime快捷键
- C/C++:用数组构造队列。
- 日经春秋 20151005
- 1.Python补充_序列的方法
- ASP.NET页面内传递参数方法
- 月光微博客
- 工具类
- GOF 23 设计模式之 状态模式
- 【PA2008】【BZOJ3500】Cliquers
- 登陆tomcat首页报404的问题
- SEnginx安全相关模块配置说明
- JDBC
- hdu 5464 Clarke and problem dp
- Eclipse--Team--SVN--URL修改
- 字符串
- Android专项练习题
- GNU Autotools的使用方法