算法题(134):地毯
审题:
本题需要我们打印出每一个点位被地毯覆盖的次数思路:
方法一:二维差分由于地毯是矩形的,地毯的覆盖就相当于矩形区域的每一个点被覆盖次数都加一了,且只有一次最终的查看结果,所以符合差分的要求
第一步:修改差分数组
第二步:求前缀和还原数据并打印
解题:
#include<iostream> using namespace std; const int N = 1010; int n, m; int f[N][N];//差分数组 int main() {cin >> n >> m;//修改差分数组while (m--){int x1, y1, x2, y2;cin >> x1 >> y1 >> x2 >> y2;f[x1][y1] += 1;f[x1][y2 + 1] -= 1;f[x2 + 1][y1] -= 1;f[x2 + 1][y2 + 1] += 1;}//还原差分数组for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){f[i][j] += f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1];cout << f[i][j] << " ";}cout << endl;}return 0; }
P3397 地毯 - 洛谷