题解:P11011 「ALFR Round 4」A 点的覆盖

你说得对,但是红绿绿紫。

Idea

怎么样才能在一个以 (a,b)(a,b) 为左上,(c,d)(c,d) 为左下的顶点组成的矩形中存在点 (e,f)(e,f) 呢?显然要满足 aeca\le e\le cdfbd\le f\le b

怎么样才能在一个以 (a,b)(a,b) 为左上,(c,d)(c,d) 为左下的顶点组成的矩形中存在点 (e,f)(e,f)(g,h)(g,h) 呢?显然要满足 amin(e,g)max(e,g)ca\le \min(e,g)\le \max(e,g)\le cdmin(f,h)max(f,h)bd\le \min(f,h)\le \max(f,h)\le b

然后对于本题的每一个点都有这样的条件。

推广一下结论:要满足在一个以 (a,b)(a,b) 为左上,(c,d)(c,d) 为左下的顶点组成的矩形中存在点 (x1,y1)(x2,y2)(xn,yn)(x_1,y_1)(x_2,y_2)\cdots(x_n,y_n),则要有 amin{x}max{x}ca\le\min\{x\}\le \max\{x\}\le cdmin{y}max{y}bd\le \min\{y\}\le \max\{y\}\le b

然后因为还要满足以 (a,b)(a,b) 为左上,(c,d)(c,d) 为左下的顶点组成的矩形是以 (p,q)(p,q) 为左上,(s,t)(s,t) 为左下的顶点组成的矩形的子矩形(其实就是题意),所以要求变为 pamin{x}max{x}csp\le a\le\min\{x\}\le \max\{x\}\le c\le stdmin{y}max{y}bqt\le d\le \min\{y\}\le \max\{y\}\le b\le q

不难发现 aa 的有 min{x}p+1\min\{x\}-p+1 种,bbqmax{y}+1q-\max\{y\}+1 种,ccsmax{x}+1s-\max\{x\}+1 种,ddmin{y}t+1\min\{y\}-t+1 种取值,由乘法原理把它们相乘就是答案。

Code

#include<bits/stdc++.h>
using namespace std;
int n,a,b,c,d,e,f,g,h;
long long ans;
int main(){
	scanf("%d%d%d%d%d",&n,&a,&b,&c,&d);
	e=-2147483647;
	f=2147483647;
	g=-2147483647;
	h=2147483647;
	for(int i=1,j,k;i<=n;i++){
		scanf("%d%d",&j,&k);
		e=max(e,j);
		f=min(f,j);
		g=max(g,k);
		h=min(h,k);
	}
	ans=1ll*(c-e+1)*(f-a+1)%1000000007;
	ans=ans*(b-g+1)%1000000007;
	ans=ans*(h-d+1)%1000000007;
	printf("%lld\n",ans);
	return 0;
}
posted @   Weslie_qwq  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示