【PTA】炮弹打蚊子
生活随笔
收集整理的這篇文章主要介紹了
【PTA】炮弹打蚊子
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
現(xiàn)在,我們用大炮來打蚊子:蚊子分布在一個M×N格的二維平面上,每只蚊子占據(jù)一格。向該平面的任意位置發(fā)射炮彈,炮彈的殺傷范圍如下示意:
O OXOO其中,X為炮彈落點(diǎn)中心,O為緊靠中心的四個有殺傷力的格子范圍。若蚊子被炮彈命中(位于X格),一擊斃命,若僅被殺傷(位于O格),則損失一半的生命力。也就是說,一次命中或者兩次殺傷均可消滅蚊子。現(xiàn)在給出蚊子的分布情況以及連續(xù)k發(fā)炮彈的落點(diǎn),給出每炮消滅的蚊子數(shù)。
輸入格式:
第一行為兩個不超過20的正整數(shù)M和N,中間空一格,表示二維平面有M行、N列。
接下來M行,每行有N個0或者#字符,其中#表示所在格子有蚊子。
接下來一行,包含一個不超過400的正整數(shù)k,表示發(fā)射炮彈的數(shù)量。
最后k行,每行包括一發(fā)炮彈的整數(shù)坐標(biāo)x和y(0≤x<M,0≤y<N),之間用一個空格間隔。
輸出格式:
對應(yīng)輸入的k發(fā)炮彈,輸出共有k行,第i行即第i發(fā)炮彈消滅的蚊子數(shù)。
輸入樣例:
5 6 00#00# 000### 00#000 000000 00#000 2 1 2 1 4輸出樣例:
0 2我的代碼如下:
#include<bits/stdc++.h> using namespace std; int main(){int n,m;cin>>n>>m;n += 2;m += 2;int arr[n][m];fill(arr[0],arr[0]+n*m,-1);char ch;for(int i=1;i<n-1;i++){for(int j=1;j<m-1;j++){cin>>ch;if(ch == '#'){arr[i][j] = 2;}}}// for(int i=1;i<n-1;i++){ // for(int j=1;j<m-1;j++){ // cout<<arr[i][j]<<" "; // } // cout<<endl; // }int zol;cin>>zol;int a,b;int cnt =0;for(int i=0;i<zol;i++){cnt = 0;cin>>a>>b;a++;b++;if(arr[a][b] > 0){arr[a][b] = 0;} //炮彈直擊半殘蚊子時需要注意,不能直接-2,變成-1是不會被算在擊殺內(nèi)的 arr[a+1][b]--;arr[a-1][b]--;arr[a][b+1]--;arr[a][b-1]--;for(int j=1;j<n-1;j++){for(int k=1;k<m-1;k++){if(arr[j][k] == 0){arr[j][k] = -1;cnt++;}}}cout<<cnt<<endl; // for(int i=1;i<n-1;i++){ // for(int j=1;j<m-1;j++){ // cout<<arr[i][j]<<" "; // } // cout<<endl; // }} // for(int i=1;i<n-1;i++){ // for(int j=1;j<m-1;j++){ // cout<<arr[i][j]<<" "; // } // cout<<endl; // } }?注釋掉的代碼是用來看每一步地圖變化的
大致思路:做一張比給出的地圖大一倍的地圖,防止數(shù)組越界,剩下的就是判斷蚊子受擊情況了
?
總結(jié)
以上是生活随笔為你收集整理的【PTA】炮弹打蚊子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。