社区讨论
求助,超清晰思路5个re,数组开小点就能ac!为什么!!
P1789【Mc生存】插火把参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lobgbkoo
- 此快照首次捕获于
- 2023/10/29 20:32 2 年前
- 此快照最后确认于
- 2023/11/04 01:58 2 年前
C
#include<stdio.h>
int a[1000000][1000000]= {0};
//x1为火炬照亮的坐标12+1本身,x2,y2为萤石照亮的坐标24+1本身,+1防越界
int x1[13]= {-2,-1,-1,-1,0,0,0,0,1,1,1,2};
int y1[13]= {0,-1,0,1,2,1,-1,-2,1,0,-1,0};
int x2[25]= {-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,0,0,0,0,1,1,1,1,1,2,2,2,2,2};
int y2[25]= {-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,1,2,2,1,0,-1,-2,2,1,0,-1,-2};
int main() {
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
//将n*n内的矩阵赋值1表示为暗,
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
a[i][j]=1;
}
}
//将照亮的n*n内的矩阵赋值为2
int huox,huoy;
for(int i=1; i<=m; i++) {
scanf("%d %d",&huox,&huoy);
huox--;
huoy--;
if(huox>=0&&huoy>=0)//防越0界
a[huox][huoy]=2;
for(int i=0; i<13; i++) {
if(huox+y1[i]>=0&&huoy+x1[i]>=0)//防越0界
a[huox+y1[i]][huoy+x1[i]]=2;
}
}
int shix,shiy;
for(int i=1; i<=k; i++) {
scanf("%d %d",&shix,&shiy);
shix--;
shiy--;
if(shix>=0&&shiy>=0)//防越0界
a[shix][shiy]=2;
for(int i=0; i<25; i++) {
if(shix+y2[i]>=0&&shiy+x2[i]>=0)//防越0界
a[shix+y2[i]][shiy+x2[i]]=2;
}
}
//仍然为1的区域表示是暗的区域
int sum=0;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
if(a[i][j]==1)
sum++;
}
}
printf("%d",sum);
}
将a数组开为1000 1000 就能过! 为什么 [流汗黄豆]一直以为数组开越大越好
回复
共 1 条回复,欢迎继续交流。
正在加载回复...