洛谷P1789MC生存插火把

洛谷P1789MC生存插火把

这道题有一个小坑,就是火把照亮的地方可能不在数组里,注意要把那一块地方去掉,这道题的出题者把范围都告诉我们了,大大滴降低了这道题的难度

下面是我的代码

c 复制代码
#include <stdio.h>

int n, m,k ;//一共有n*n个数
int a[100][100] = { 0 };//记录火把的位置
int all=0;
int main() {
	scanf("%d %d %d", &n, &m, &k);
	for (int i = 2; i <= (m + 1); i++) {
		int x, y;//用于存储火把的位置
		scanf("%d %d", &x, &y);
		a[x - 1][y - 1] = 2;//2表示放了火把
		for (int x1 = x - 3; x1 <= (x + 1); x1++) {//横着
            while(x1<0) x1++;
			if (a[x1][y-1] == 0) a[x1][y-1] = 1;//1代表被照亮
			//斜着
			if (x1 == (x - 2) && a[x1][y - 2] == 0)a[x1][y - 2] = 1;
			if (x1 == (x - 2) && a[x1][y] == 0)a[x1][y] = 1;
			if (x1 == x && a[x1][y - 2] == 0)a[x1][y - 2] = 1;
			if (x1 == x  && a[x1][y] == 0)a[x1][y] = 1;
		}
		for (int y1 = y - 3; y1 <= (y + 1); y1++) {//竖着
            while(y1<0) y1++;
			if (a[x - 1][y1] == 0) a[x - 1][y1] = 1;
		}
		

	}
	for (int i = m + 2; i <= m + k + 1; i++) {
		int o, p;//储存萤石的位置
		scanf("%d %d", &o, &p);
		a[o - 1][p - 1] = 3;//3表示放了萤石
		for (int o1 = o - 3; o1 <= (o + 1); o1++) {
            while(o1<0)o1++;
			for (int p1 = p - 3; p1 <= (p + 1); p1++) {
                while(p1<0)p1++;
				if (a[o1][p1] == 0) a[o1][p1] = 1;//表示被照亮了
			}
		}
	}
	for (int u = 0; u < n; u++) {
		for (int j = 0; j < n; j++) {
			if (a[j][u] == 0) all++;
		}
	}
	printf("%d", all);
}
相关推荐
tt55555555555512 分钟前
《神经网络与深度学习》学习笔记一
深度学习·神经网络·学习
代码雕刻家21 分钟前
1.4.课设实验-数据结构-单链表-文教文化用品品牌2.0
c语言·数据结构
侯小啾1 小时前
【22】C语言 - 二维数组详解
c语言·数据结构·算法
qq_479875431 小时前
Linux time function in C/C++【2】
linux·c语言·c++
TL滕1 小时前
从0开始学算法——第一天(如何高效学习算法)
数据结构·笔记·学习·算法
仰望—星空1 小时前
MiniEngine学习笔记 : CommandAllocatorPool
笔记·学习
kblj55552 小时前
学习Linux——网络——网卡
linux·网络·学习
暖阳之下2 小时前
学习周报二十
人工智能·深度学习·学习
yuuki2332332 小时前
【数据结构】双向链表的实现
c语言·数据结构·后端
ol木子李lo2 小时前
Doxygen入门指南:从注释到自动文档
c语言·c++·windows·编辑器·visual studio code·visual studio·doxygen