博物館網(wǎng)站制作搜什么關(guān)鍵詞比較刺激
day6--P1830 城市轟炸--1.26
習(xí)題概述
題目背景
一個大小為 n×m?的城市遭到了?x?次轟炸,每次都炸了一個每條邊都與邊界平行的矩形。
題目描述
在轟炸后,有?y?個關(guān)鍵點,指揮官想知道,它們有沒有受到過轟炸,如果有,被炸了幾次,最后一次是第幾輪。
輸入格式
第一行共四個整數(shù),分別為n,m,x,y。
接下來?x?行,每行四個整數(shù) x1?,y1?,x2?,y2?,表示被轟炸的矩形的左上角坐標(biāo)和右下角坐標(biāo) b比如?1,3,7,10? ?( 1,3,7,10就表示被轟炸的地方是從(1,3)?到(7,10)?的矩形。)
接下來?y?行,每行兩個整數(shù),表示這個關(guān)鍵點的坐標(biāo)。
輸出格式
輸出共?y?行,每行第一個字符為?Y
?或?N
,表示是否被轟炸;若為?Y
,在一個空格后為兩個整數(shù),表示被炸了幾次和最后一次是第幾輪。
代碼部分
#include<bits/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 表示城市行、列、轟炸次數(shù)(被炸的矩形的數(shù)量)、關(guān)鍵點數(shù)量(需要查詢的點的數(shù)量) cin>>n>>m>>x>>y;for(int i=1;i<=x;++i){//輸入轟炸的左上角坐標(biāo)和右下角坐標(biāo)cin>>xx>>yy>>xxx>>yyy;//遍歷被轟炸矩形的行坐標(biāo),從左上角的行坐標(biāo) xx 遍歷到右下角的行坐標(biāo) xxxfor(int ii=xx;ii<=xxx;++ii)//遍歷被轟炸矩形的列坐標(biāo),從左上角的列坐標(biāo) yy 遍歷到右下角的列坐標(biāo) yyyfor(int jj=yy;jj<=yyy;++jj){++a[ii][jj]; //把此坐標(biāo)轟炸的次數(shù)加1b[ii][jj]=i; //把值改成最后轟炸的一輪(記錄最后一次轟炸發(fā)生在第幾輪)}}for(int i=1;i<=y;++i)//枚舉關(guān)鍵點{cin>>xx>>yy;//輸入第i個關(guān)鍵點的坐標(biāo)if(a[xx][yy]==0)//判斷此關(guān)鍵點有沒有被炸過cout<<"N\n";else//沒炸過輸出N//否則輸出Y、此關(guān)鍵點被轟炸次數(shù)和最后轟炸的一輪cout<<"Y "<<a[xx][yy]<<' '<<b[xx][yy]<<"\n";}return 0;
}
心得體會
1.下面是該小練習(xí)的轟炸情況:
2.下面是標(biāo)注了具體輸入輸出語句的運行結(jié)果:
3.思路如下:
整體思路:是首先根據(jù)輸入的轟炸信息,記錄每個格子被轟炸的次數(shù)和最后一次轟炸的輪數(shù)。然后根據(jù)查詢的關(guān)鍵點,判斷其是否受到過轟炸,并輸出相應(yīng)的結(jié)果。
具體思路:
1)從標(biāo)準(zhǔn)輸入讀取城市的行數(shù)?n
、列數(shù)?m
、轟炸次數(shù)?x
?和關(guān)鍵點數(shù)量?y
。
2)使用循環(huán),依次處理每次轟炸的矩形區(qū)域。
? ?(1)從標(biāo)準(zhǔn)輸入讀取被轟炸矩形的左上角坐標(biāo)?(xx, yy)
?和右下角坐標(biāo)?(xxx, yyy)
。
? ?(2)使用嵌套循環(huán)遍歷被轟炸矩形區(qū)域內(nèi)的每個格子。
? ?(3)在每個格子上,將數(shù)組?a
?中對應(yīng)位置的值增加1,表示該位置被轟炸的次數(shù)。
? ?(4)將數(shù)組?b
?中對應(yīng)位置的值設(shè)置為當(dāng)前轟炸的輪數(shù)。
3)使用循環(huán),依次處理每個關(guān)鍵點的查詢。
? ?(1)如果關(guān)鍵點在數(shù)組?a
?中對應(yīng)位置的值不為0,則輸出 "Y",后面跟著被轟炸的次數(shù)和最后一?次轟炸的輪數(shù)。
? ?(2)檢查關(guān)鍵點在數(shù)組?a
?中對應(yīng)位置的值,如果為0,則輸出 "N",表示該關(guān)鍵點未受到轟炸。? ? ?(3)從標(biāo)準(zhǔn)輸入讀取關(guān)鍵點的坐標(biāo)?(xx, yy)
4)輸出結(jié)果到標(biāo)準(zhǔn)輸出。
4.拿到題后觀察輸入輸出的示例其實很重要,從中可以梳理出大致的程序結(jié)構(gòu)。
5.附帶批注具體的文字的代碼
#include<bits/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 表示城市行、列、轟炸次數(shù)(被炸的矩形的數(shù)量)、關(guān)鍵點數(shù)量(需要查詢的點的數(shù)量) cout << "請輸入城市的行數(shù)、列數(shù)、轟炸次數(shù)和關(guān)鍵點數(shù)量:";cin>>n>>m>>x>>y;cout << "請依次輸入每次轟炸的矩形區(qū)域信息!" << endl;for(int i=1;i<=x;++i){//輸入轟炸的左上角坐標(biāo)和右下角坐標(biāo)cout << "輸入第 " << i << " 次轟炸的左上角坐標(biāo)和右下角坐標(biāo):";cin>>xx>>yy>>xxx>>yyy;//遍歷被轟炸矩形的行坐標(biāo),從左上角的行坐標(biāo) xx 遍歷到右下角的行坐標(biāo) xxxfor(int ii=xx;ii<=xxx;++ii)//遍歷被轟炸矩形的列坐標(biāo),從左上角的列坐標(biāo) yy 遍歷到右下角的列坐標(biāo) yyyfor(int jj=yy;jj<=yyy;++jj){++a[ii][jj]; //把此坐標(biāo)轟炸的次數(shù)加1b[ii][jj]=i; //把值改成最后轟炸的一輪(記錄最后一次轟炸發(fā)生在第幾輪)}}cout << "請依次輸入每個關(guān)鍵點的坐標(biāo)!" << endl;for(int i=1;i<=y;++i)//枚舉關(guān)鍵點{cout << "輸入第 " << i << " 個關(guān)鍵點的坐標(biāo):";cin>>xx>>yy;//輸入第i個關(guān)鍵點的坐標(biāo)if(a[xx][yy]==0)//判斷此關(guān)鍵點有沒有被炸過cout<<"N 關(guān)鍵點未受到轟炸";//沒炸過輸出Nelse//否則輸出Y、此關(guān)鍵點被轟炸次數(shù)和最后轟炸的一輪cout<<"Y 關(guān)鍵點受到轟炸"<<",被轟炸次數(shù)為"<<a[xx][yy]<< ",最后一次轟炸的輪數(shù)為 " <<b[xx][yy]<<"\n";}return 0;
}