Background
一个大小为 n×m 的城市遭到了 x 次轰炸,每次都炸了一个每条边都与边界平行的矩形。
Description
在轰炸后,有 y 个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮。
Input
第一行共四个整数,分别为 n,m,x,y。
接下来 x 行,每行四个整数 x1,y1,x2,y2,表示被轰炸的矩形的左上角坐标和右下角坐标(比如 1,3,7,10 就表示被轰炸的地方是从 (1,3) 到 (7,10) 的矩形)。
接下来 y 行,每行两个整数,表示这个关键点的坐标。
Output
输出共 y 行,每行第一个字符为 Y
或 N
,表示是否被轰炸;若为 Y
,在一个空格后为两个整数,表示被炸了几次和最后一次是第几轮。
Sample 1
Inputcopy | Outputcopy |
---|---|
10 10 2 3 1 1 5 5 5 5 10 10 3 2 5 5 7 1 | Y 1 1 Y 2 2 N |
Hint
对于 100%100% 数据,满足 1≤n,m≤100。
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
int x1;
int x2;
int y1;
int y2;
} node;
typedef struct znode
{
int x;
int y;
} znode;
int main()
{
int n,m,x,y;
cin >> n >> m >> x >> y;
int groud = 0;
int sum = 0;
node a[100];
znode b[10000];
for(int i = 0; i < x; i++)
{
cin >> a[i].x1 >> a[i].y1 >> a[i].x2 >> a[i].y2;
}
for(int j = 0; j < y; j++)
{
cin >> b[j].x >> b[j].y;
}
for(int k = 0; k < y; k++)
{
sum = 0; //要注意清零
for(int l = 0; l < x; l++)
{
if(b[k].x >= a[l].x1 && b[k].x <= a[l].x2 && b[k].y >= a[l].y1 && b[k].y <= a[l].y2)
{
sum++;
groud = l+1;
}
}
if(sum > 0)
{
cout << "Y" << " " << sum << " " << groud <<endl;
}
else
{
cout << "N" <<endl;
}
}
return 0;
}
本题还可以用二维数组解决