內容

輸出座標附近九宮格內有多少顆地雷(每格座標最多一顆地雷

說明圖片



輸入說明

單筆測資

第一行輸入n,m

代表雷區的長與寬

第二行有一a

表示接下來有a行x,y座標表示a顆地雷

最後有一t表示詢問t次

輸出說明

輸出該座標九宮格內有多少地雷

(包含該座標腳下



範例輸入

40 40

2

20 20

21 21

2

20 21

30 30

範例輸出

2

0



提示

n≤500,m≤500

a≤n∗m

t≤100

地雷座標 0≤x≤n−1,0≤x≤m−1

查詢座標 1≤x≤n−2,1≤x≤m−2

不用特判邊界



程式


#include <iostream>
using namespace std;
int main(){
	int n, m, a, t, z = 0;
	cin>>n>>m;		//詢問長與寬
	int xy[n][m];
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++){
			xy[i][j] = 0;
		}
	}
	cin>>a;
	while(a--){
		int x, y;
		cin>>x>>y;
		xy[x][y] = 1;
	}
	cin>>t;
	while(t--){
		int x, y;
		cin>>x>>y;
		if(xy[x+1][y+1] == 1) z++;
		if(xy[x+1][y-1] == 1) z++;
		if(xy[x-1][y-1] == 1) z++;
		if(xy[x-1][y+1] == 1) z++;
		if(xy[x][y-1] == 1) z++;
		if(xy[x+1][y] == 1) z++;
		if(xy[x-1][y] == 1) z++;
		if(xy[x][y+1] == 1) z++;
		if(xy[x][y] == 1) z++;
		cout<<z<<endl;
        z = 0;
	}
}


解說

變數z代表周圍炸彈的數量,其他都和題目一樣。

第一個for迴圈讓陣列全部歸零,方便之後判斷。

然後再把有炸彈的那格設為1,最後查詢座標周圍有沒有炸彈,就用暴力法慢慢找就行了。