首页 > 其他分享 >P3397 地毯

P3397 地毯

时间:2024-05-01 12:33:51浏览次数:6  
标签:le 差分 times 数组 P3397 1010 地毯

P3397 地毯

题目

在 \(n\times n\) 的格子上有 \(m\) 个地毯。

给出这些地毯的信息,问每个点被多少个地毯覆盖。

输入

第一行,两个正整数 \(n,m\)。意义如题所述。

接下来 \(m\) 行,每行两个坐标 \((x_1,y_1)\) 和 \((x_2,y_2)\),代表一块地毯,左上角是 \((x_1,y_1)\),右下角是 \((x_2,y_2)\)。

输出

输出 \(n\) 行,每行 \(n\) 个正整数。

第 \(i\) 行第 \(j\) 列的正整数表示 \((i,j)\) 这个格子被多少个地毯覆盖。

样例

输入

5 3
2 2 3 3
3 3 5 5
1 2 1 4

输出

0 1 1 1 0
0 1 1 0 0
0 1 2 1 1
0 0 1 1 1
0 0 1 1 1

提示

样例解释

覆盖第一个地毯后:

\(0\) \(0\) \(0\) \(0\) \(0\)
\(0\) \(1\) \(1\) \(0\) \(0\)
\(0\) \(1\) \(1\) \(0\) \(0\)
\(0\) \(0\) \(0\) \(0\) \(0\)
\(0\) \(0\) \(0\) \(0\) \(0\)

覆盖第一、二个地毯后:

\(0\) \(0\) \(0\) \(0\) \(0\)
\(0\) \(1\) \(1\) \(0\) \(0\)
\(0\) \(1\) \(2\) \(1\) \(1\)
\(0\) \(0\) \(1\) \(1\) \(1\)
\(0\) \(0\) \(1\) \(1\) \(1\)

覆盖所有地毯后:

\(0\) \(1\) \(1\) \(1\) \(0\)
\(0\) \(1\) \(1\) \(0\) \(0\)
\(0\) \(1\) \(2\) \(1\) \(1\)
\(0\) \(0\) \(1\) \(1\) \(1\)
\(0\) \(0\) \(1\) \(1\) \(1\)

数据范围

对于 \(20\%\) 的数据,有 \(n\le 50\),\(m\le 100\)。

对于 \(100\%\) 的数据,有 \(n,m\le 1000\)。


思路

分析题目,对数值均为 \(0\) 的原始数组做 \(m\) 次操作,每次将给定矩阵范围加 \(1\)。如果暴力计算每次操作的复杂度是 \(O(n \times n)\),\(m\) 次操作后总复杂度是 \(O(n \times n \times m)\)。因此考虑用二维差分数组的方式实现,相对于模板此题其实更为简单。首先原始数组为 \(0\),差分数组自然也是 \(0\),然后对二维差分数组进行修改操作,最后求出修改后的差分数组的前缀和。


代码

#include <bits/stdc++.h>

using namespace std;

int a[1010][1010], f[1010][1010], n, m, xa, ya, xb, yb;

int main()
{
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= m; i ++ )
	{
		scanf("%d %d %d %d", &xa, &ya, &xb, &yb);
		a[xa][ya] += 1;
		a[xa][yb + 1] -= 1;
		a[xb + 1][ya] -= 1;
		a[xb + 1][yb + 1] += 1;
	}
	for (int i = 1; i <= n; i ++ )
	{
		for (int j = 1; j <= n; j ++ )
			f[i][j] = f[i][j - 1] + f[i - 1][j] - f[i - 1][j - 1] + a[i][j];
	}
	for (int i = 1; i <= n; i ++ )
	{
		for (int j = 1; j <= n; j ++ )
			printf("%d ", f[i][j]);
		puts("");
	}
	return 0;
}

标签:le,差分,times,数组,P3397,1010,地毯
From: https://www.cnblogs.com/IronMan-PZX/p/18169245

相关文章

  • 每日一题 第一期 洛谷 铺地毯
    [NOIP2011提高组]铺地毯https://www.luogu.com.cn/problem/P1003题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n......
  • 洛谷题单指南-递推与递归-P1228 地毯填补问题
    原题链接:https://www.luogu.com.cn/problem/P1228题意解读:用4种毯子铺满2^k*2^k的区域,留出一个公主位置,输出所有毯子拐角的坐标以及哪种毯子,看起来有点无从下手,可以从k=1,k=2,k=3入手去依次考虑,找到规律,用分治法解决。解题思路:1、当k=1时,即2*2的区域,对于任意一个位置是公主,都......
  • P3397 地毯
    原题链接二维差分的简单应用。作为学二维差分时的练手题很不错。主要代码:#include<bits/stdc++.h>usingnamespacestd;constintN=1002;inta[N][N];intmain(){ios::sync_with_stdio(false);intn,m;cin>>n>>m;for(inti=1;i<=m;i++){in......
  • P3397 地毯
    1.题目介绍2.题解2.1模拟思路模拟,使用二维数组记录每一块地皮实际被覆盖情况即可代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn,m; cin>>n>>m; vector<vector<int>>point(n,vector<int>(n,0)); for(inti=0;i<m;i++){ ......
  • [NOIP2011 提高组] 铺地毯
    题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有\(n\)张地毯,编号从\(1\)到\(n\)。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设......
  • 地毯和小地毯16 CFR 1630 和16 CFR 1631表面可燃性标准GCC清关认证
    出口美国地垫GCC清关认证美国联邦法律规定,地毯和垫子要符合易燃性标准和其它要求,包括2008年《美国消费品安全改进法》的要求。在地毯和垫子经过检测或合理检测项目后,作为一般用途的地毯和垫子的生产商和进口商必须在一般合规证书(GCC)中认证,地毯和垫子符合适用标准,确保合规和/或按......
  • 地垫/毛绒地毯出口美国GCC清关认证亚马逊gcc认证
    出口美国地垫GCC清关认证美国联邦法律规定,地毯和垫子要符合易燃性标准和其它要求,包括2008年《美国消费品安全改进法》的要求。在地毯和垫子经过检测或合理检测项目后,作为一般用途的地毯和垫子的生产商和进口商必须在一般合规证书(GCC)中认证,地毯和垫子符合适用标准,确保合规和/或按......
  • P1003 [NOIP2011 提高组] 铺地毯
    第一思路:开一个N*N的数组,每次都扫一遍地毯范围并标记编号然后你会发现:喜提MLE为什么呢?我们来看看数据范围0≤n≤1e4n的范围是1e4,数组总大小为1e16,大约需要4000TB的内存空间服务器也不带这么玩的正解:将地毯信息用结构体存储structnode{ intx1,y1,x2,y2;//x1......
  • 【题解】洛谷 P1003 [NOIP2011 提高组] 铺地毯
    原题链接解题思路如果直接按照题意开一个二维数组来模拟每个点最上面的地毯编号,会发现所占空间最坏情况下约为(2*105)2*4B=4*1010*4B=1.6*1011B≈149GB,程序完全无法运行。但实际上没有必要将每一个点的信息记录下来,只需要记录每一块地毯能覆盖哪些点,再依次判断哪那些地毯可以......
  • 铺地毯---算法题
    题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有张地毯,编号从到。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道......