题目背景
一个大小为 �×�n×m 的城市遭到了 �x 次轰炸,每次都炸了一个每条边都与边界平行的矩形。
题目描述
在轰炸后,有 �y 个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮。
输入格式
第一行共四个整数,分别为 �,�,�,�n,m,x,y。
接下来 �x 行,每行四个整数 �1,�1,�2,�2x1,y1,x2,y2,表示被轰炸的矩形的左上角坐标和右下角坐标(比如 1,3,7,101,3,7,10 就表示被轰炸的地方是从 (1,3)(1,3) 到 (7,10)(7,10) 的矩形)。
接下来 �y 行,每行两个整数,表示这个关键点的坐标。
输出格式
输出共 �y 行,每行第一个字符为
Y
或N
,表示是否被轰炸;若为Y
,在一个空格后为两个整数,表示被炸了几次和最后一次是第几轮。输入输出样例
输入 #1
10 10 2 3 1 1 5 5 5 5 10 10 3 2 5 5 7 1输出 #1
Y 1 1 Y 2 2 N说明/提示
对于 100%100% 数据,满足 1≤�,�≤1001≤n,m≤100。
如果这个点的坐标在范围之内,那么将总数加上一,最后一次轰炸变成这一次:
if(o>=c[j]&&o<=e[j]&&p>=d[j]&&p<=f[j]){
sum+=1;
last=j;
}
循环遍历每一个轰炸范围:
for(int j=1;j<=x;j++){
if(o>=c[j]&&o<=e[j]&&p>=d[j]&&p<=f[j]){
sum+=1;
last=j;
}//如果这个点的坐标在范围之内,那么将总数加上一,最后一次轰炸变成这一次
}
前提是总数要大于等于0才能输出有被轰炸:
if(sum>0){
cout<<"Y"<<" "<<sum<<" "<<last<<endl;
}
循环遍历每一个点坐标:
for(int i=1;i<=y;i++){
int o,p,sum=0,last=0;
cin>>o>>p;
for(int j=1;j<=x;j++){
if(o>=c[j]&&o<=e[j]&&p>=d[j]&&p<=f[j]){
sum+=1;
last=j;
}//如果这个点的坐标在范围之内,那么将总数加上一,最后一次轰炸变成这一次
}//循环遍历每一个轰炸范围
if(sum>0){
cout<<"Y"<<" "<<sum<<" "<<last<<endl;
}//前提是总数要大于等于0才能输出有被轰炸
else{
cout<<"N"<<endl;
}
}
源代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,x,y,a[101],b[101],c[101],d[101],e[101],f[101];
cin>>n>>m>>x>>y;
for(int i=1;i<=x;i++){
cin>>c[i]>>d[i]>>e[i]>>f[i];
}for(int i=1;i<=y;i++){
int o,p,sum=0,last=0;
cin>>o>>p;
for(int j=1;j<=x;j++){
if(o>=c[j]&&o<=e[j]&&p>=d[j]&&p<=f[j]){
sum+=1;
last=j;
}//如果这个点的坐标在范围之内,那么将总数加上一,最后一次轰炸变成这一次
}//循环遍历每一个轰炸范围
if(sum>0){
cout<<"Y"<<" "<<sum<<" "<<last<<endl;
}//前提是总数要大于等于0才能输出有被轰炸
else{
cout<<"N"<<endl;
}
}//循环遍历每一个点坐标
return 0;
}