一下午了,我快崩了找不到问题
查看原帖
一下午了,我快崩了找不到问题
459589
离开家楼主2021/2/4 14:57
c
#include <stdio.h>
#include <malloc.h>


int main (void)
{
	int n, m, k;
	
	scanf("%d %d %d", &n, &m, &k);
	bool ** p;
	p = (bool **) malloc (sizeof(bool *) * n);
	int i;
	for (i = 0; i < n; ++i)
	{
		p[i] = (bool *) malloc (sizeof(bool) * n);
	}
	int * x_m, * y_m, * x_k, * y_k;
	x_m = (int *) malloc (sizeof(int) * m);
	y_m = (int *) malloc (sizeof(int) * m);
	x_k = (int *) malloc (sizeof(int) * k);
	y_k = (int *) malloc (sizeof(int) * k);
	
	for (i = 0; i < m; ++i)
	{
		scanf("%d %d", &x_m[i], &y_m[i]);
		x_m[i] -= 1;
		y_m[i] -= 1;
	}
	for (i = 0; i < k; ++i)
	{
		scanf("%d %d", &x_k[i], &y_k[i]);
		x_k[i] -= 1;
		y_k[i] -= 1;
	}
	int x, y;
	for (i = 0; i < m; ++i)
	{
		for (x = x_m[i] - 1; x <= x_m[i] + 1; ++x)
		{
			for (y = y_m[i] - 1; y <= y_m[i] + 1; ++y)
			{
				if (x >= 0 && x < n)
				{
					if (y >= 0 && y < n)
					{
						p[x][y] = true;
					}
				}
			}
		}
		if (x_m[i] - 2 >= 0)
		{
			p[x_m[i] - 2][y_m[i]] = true;
		}
		if (x_m[i] + 2 < n)
		{
			p[x_m[i] + 2][y_m[i]] = true;
		}
		if (y_m[i] + 2 < n)
		{
			p[x_m[i]][y_m[i] + 2] = true;
		}
		if (y_m[i] - 2 >= 0)
		{
			p[x_m[i]][y_m[i] - 2] = true;
		}
	}
	for (i = 0; i < k; ++i)
	{
		for (x = x_k[i] - 2; x <= x_k[i] + 2; ++x)
		{
			for (y = y_k[i] - 2; y <= y_k[i] + 2; ++y)
			{
				if (x >= 0 && x < n)
				{
					if (y >= 0 && y < n)
					{
						p[x][y] = true;
					}
				}
			}
		}
	}
	int count = 0;
	for (x = 0; x < n; ++x)
	{
		for (y = 0; y < n; ++y)
		{
			if (p[x][y] != true)
			{
				count++;
			}
		}
	}
	printf("%d", count);
	
	
	
	free (p);
	free (x_m);
	free (x_k);
	free (y_m);
	free (y_k);
	return 0;
}

我发现当n超过9的时候单个火把或单个萤石结果不对

2021/2/4 14:57
加载中...