wordpress 点击次数,深圳seo网站排名优化,陕西企尚网络科技有限公司,济南百度seo排名公司day6--P1830 城市轰炸--1.26
习题概述
题目背景
一个大小为 nm 的城市遭到了 x 次轰炸#xff0c;每次都炸了一个每条边都与边界平行的矩形。
题目描述
在轰炸后#xff0c;有 y 个关键点#xff0c;指挥官想知道#xff0c;它们有没有受到过轰炸#xff0c;如果有每次都炸了一个每条边都与边界平行的矩形。
题目描述
在轰炸后有 y 个关键点指挥官想知道它们有没有受到过轰炸如果有被炸了几次最后一次是第几轮。
输入格式
第一行共四个整数分别为n,m,x,y。
接下来 x 行每行四个整数 x1,y1,x2,y2表示被轰炸的矩形的左上角坐标和右下角坐标 b比如 1,3,7,10 1,3,7,10就表示被轰炸的地方是从(1,3) 到(7,10) 的矩形。
接下来 y 行每行两个整数表示这个关键点的坐标。
输出格式
输出共 y 行每行第一个字符为 Y 或 N表示是否被轰炸若为 Y在一个空格后为两个整数表示被炸了几次和最后一次是第几轮。 代码部分
#includebits/stdc.h//令人兴奋的万能头
using namespace std;int n,m,x,y,xx,yy,xxx,yyy,a[101][101],b[101][101];
int main()
{//n、m、x、y 表示城市行、列、轰炸次数被炸的矩形的数量、关键点数量需要查询的点的数量 cinnmxy;for(int i1;ix;i){//输入轰炸的左上角坐标和右下角坐标cinxxyyxxxyyy;//遍历被轰炸矩形的行坐标,从左上角的行坐标 xx 遍历到右下角的行坐标 xxxfor(int iixx;iixxx;ii)//遍历被轰炸矩形的列坐标,从左上角的列坐标 yy 遍历到右下角的列坐标 yyyfor(int jjyy;jjyyy;jj){a[ii][jj]; //把此坐标轰炸的次数加1b[ii][jj]i; //把值改成最后轰炸的一轮(记录最后一次轰炸发生在第几轮)}}for(int i1;iy;i)//枚举关键点{cinxxyy;//输入第i个关键点的坐标if(a[xx][yy]0)//判断此关键点有没有被炸过coutN\n;else//没炸过输出N//否则输出Y、此关键点被轰炸次数和最后轰炸的一轮coutY a[xx][yy] b[xx][yy]\n;}return 0;
}
心得体会
1.下面是该小练习的轰炸情况 2.下面是标注了具体输入输出语句的运行结果 3.思路如下
整体思路是首先根据输入的轰炸信息记录每个格子被轰炸的次数和最后一次轰炸的轮数。然后根据查询的关键点判断其是否受到过轰炸并输出相应的结果。
具体思路
1从标准输入读取城市的行数 n、列数 m、轰炸次数 x 和关键点数量 y。
2使用循环依次处理每次轰炸的矩形区域。 1从标准输入读取被轰炸矩形的左上角坐标 (xx, yy) 和右下角坐标 (xxx, yyy)。 2使用嵌套循环遍历被轰炸矩形区域内的每个格子。 3在每个格子上将数组 a 中对应位置的值增加1表示该位置被轰炸的次数。 4将数组 b 中对应位置的值设置为当前轰炸的轮数。
3使用循环依次处理每个关键点的查询。 1如果关键点在数组 a 中对应位置的值不为0则输出 Y后面跟着被轰炸的次数和最后一 次轰炸的轮数。 2检查关键点在数组 a 中对应位置的值如果为0则输出 N表示该关键点未受到轰炸。 3从标准输入读取关键点的坐标 (xx, yy)
4输出结果到标准输出。
4.拿到题后观察输入输出的示例其实很重要从中可以梳理出大致的程序结构。
5.附带批注具体的文字的代码
#includebits/stdc.h//令人兴奋的万能头
using namespace std;int n,m,x,y,xx,yy,xxx,yyy,a[101][101],b[101][101];
int main()
{
//n、m、x、y 表示城市行、列、轰炸次数被炸的矩形的数量、关键点数量需要查询的点的数量 cout 请输入城市的行数、列数、轰炸次数和关键点数量;cinnmxy;cout 请依次输入每次轰炸的矩形区域信息! endl;for(int i1;ix;i){//输入轰炸的左上角坐标和右下角坐标cout 输入第 i 次轰炸的左上角坐标和右下角坐标;cinxxyyxxxyyy;//遍历被轰炸矩形的行坐标,从左上角的行坐标 xx 遍历到右下角的行坐标 xxxfor(int iixx;iixxx;ii)//遍历被轰炸矩形的列坐标,从左上角的列坐标 yy 遍历到右下角的列坐标 yyyfor(int jjyy;jjyyy;jj){a[ii][jj]; //把此坐标轰炸的次数加1b[ii][jj]i; //把值改成最后轰炸的一轮(记录最后一次轰炸发生在第几轮)}}cout 请依次输入每个关键点的坐标! endl;for(int i1;iy;i)//枚举关键点{cout 输入第 i 个关键点的坐标;cinxxyy;//输入第i个关键点的坐标if(a[xx][yy]0)//判断此关键点有没有被炸过coutN 关键点未受到轰炸;//没炸过输出Nelse//否则输出Y、此关键点被轰炸次数和最后轰炸的一轮coutY 关键点受到轰炸,被轰炸次数为a[xx][yy] 最后一次轰炸的轮数为 b[xx][yy]\n;}return 0;
}