YYX_YYJ 向您问好~
当前:离线❤️
解题思路:
暴力方法解决:
这题的解题思路还是很清晰的,
既然地毯的范围都告诉你了,
那有一个很简单且暴力的方法就是每次给定地毯的大小之后使范围内数组的值全部加一,
经过m次这样的操作之后,
再把数组中的值打印出来即可,
但是如果这样做的话,每次使地毯内的值加一的时间复杂度是o(n^2),
那么整个程序的时间复杂度就是o(mn^2+n^2)
,题目的数据范围是n,m<=1000,那如果是<=10000,
那么这么大的时间复杂度就显然不能满足所需,那么有没有更好的方法呢?
答案肯定是有的,这里附上暴力算法的代码。
请查看正确代码:
#include<stdio.h>
int grid[1002][1002];
//使用全局变量定义数组是因为1002*1002所占用的空间太大,定义为局部变量容易爆栈
void cover( int x1, int y1, int x2, int y2)
{
int i = 0;
int j = 0;
for (i = x1; i <= x2; i++)
{
for (j = y1 ; j <= y2; j++)
++grid[i][j];
}
}
int main()
{
int n = 0,m = 0;
scanf("%d %d", &n,&m);
int i = 0,j = 0;
int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
for (i = 0; i < m; i++)
{
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
cover(x1, y1, x2, y2);
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
printf("%d ", grid[i][j]);
}
printf("\n");
}
return 0;
}