社区讨论

求助,超清晰思路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 条回复,欢迎继续交流。

正在加载回复...