洛谷 P11011 点的覆盖

洛谷 P11011 点的覆盖

题意

给定一个四边平行于坐标轴的矩形 A,给定 n 个在矩形 A 内部(可能在边缘上)的点。

求有多少个 A 的子矩形覆盖了所有 n 个点(允许在边缘上)。

所有坐标都是整数。

思路

求出:X1=maxi=1nxiX2=mini=1nxiY1=maxi=1nyiY2=mini=1nyi

记矩形左上角坐标为 (x,y),右下角坐标为 (X,Y),设点 P(X2,Y1)Q(X1,Y2) 如图:

容易发现子矩形的左上角只能在左上角的黑色矩形中,右下角只能在右下角的黑色矩形中。

算出两个矩形中有多少个整点,相乘即可。

左上角为 (x,y),右下角为 (X,Y) 的矩形中整点的个数为 (Xx+1)(yY+1)

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6 + 5;
const int mod = 1e9 + 7;
int n, X1, Y1, X2, Y2;
int xmax, xmin, ymax, ymin;
int main() {
	cin >> n >> X1 >> Y1 >> X2 >> Y2;
	xmin = ymin = 1e9;
	for (int i = 1, x, y; i <= n; i ++) {
		cin >> x >> y;
		xmin = min(xmin, x);
		xmax = max(xmax, x);
		ymin = min(ymin, y);
		ymax = max(ymax, y); 
	}
	ll z = (xmin - X1 + 1) * (Y1 - ymax + 1) % mod;
	ll y = (X2 - xmax + 1) * (ymin - Y2 + 1) % mod;
	ll ans = z * y % mod;
	cout << ans << "\n";
	return 0;
}
posted @   maniubi  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示