刷题日记—数组—数组偏移
好久没好好刷基础题了,今天接着刷了数组类型,碰到了一个数组偏移问题,如下:

题解:
#include<iostream>
using namespace std;
bool fire[10000][10000];
int main(){ //要注意数组越界问题
int n,m,k;
cin>>n>>m>>k;
while(m--){
int cx,cy;
cin>>cx>>cy;
cx+=2; //从i=3开始遍历 进行数组的偏移,防止,1,2的时候数组越界访问,之后遍历统计数量的时候也要从i=3的时候开始遍历
cy+=2;
for(int i=cx-2;i<cx+3;++i){
fire[i][cy]=true;
}
for(int i=cy-2;i<cy+3;++i){
fire[cx][i]=true;
}
fire[cx+1][cy+1]=true,fire[cx-1][cy+1]=true;
fire[cx-1][cy-1]=true,fire[cx+1][cy-1]=true;
} //火把放置完毕
while(k--){
int dx,dy;
cin>>dx>>dy;
dx+=2,dy+=2;
for(int i=dx-2;i<dx+3;++i){
for(int j=dy-2;j<dy+3;++j){
fire[i][j]=true;
}
}
}
int cnt=0;
for(int i=3;i<=n+2;++i){
for(int j=3;j<=n+2;++j){
if(!fire[i][j]){
cnt++;
}
}
}
cout<<cnt<<endl;
return 0;
}
数组偏移的核心思想就是先把数组向右偏移k个,防止之后再遍历的时候下标越界,如1,2等情况;最后遍历统计结果的时候,n也要+k。
浙公网安备 33010602011771号