当前位置: 代码迷 >> 综合 >> 【codeforces 1028C Rectangles】【面积并】【枚举+思维】【前后缀】【重载操作符】【找一个点与至少(n-1)个矩形有交】
  详细解决方案

【codeforces 1028C Rectangles】【面积并】【枚举+思维】【前后缀】【重载操作符】【找一个点与至少(n-1)个矩形有交】

热度:96   发布时间:2024-01-04 11:48:49.0

【链接】

https://codeforces.com/problemset/problem/1028/C

【题意】

找一个点,使得至少与(n-1)个矩形有交

【思路】

每两个矩形求交会有一个面积并,但是要判断是否合法。暴力枚举每个矩形,计算不包含这个矩形的前后缀,求解。

【代码】

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
const int maxn = 2e5+3;struct node{int x1, y1, x2, y2;node operator + (const node &r)const {return { max(x1, r.x1), max(y1, r.y1), min(x2, r.x2), min(y2, r.y2)};}
}k[maxn],A[maxn],B[maxn];int main() {int n;scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d%d%d%d", &k[i].x1, &k[i].y1, &k[i].x2, &k[i].y2);}A[1] = k[1]; B[n] = k[n];for (int i = 2; i <= n; i++) {A[i] = A[i - 1] + k[i];}for (int i = n - 1; i; i--) {B[i] = B[i + 1] + k[i];}for (int i = 1; i <= n; i++) {node now;if (i == 1)now = B[2];else if (i == n)now = A[n - 1];else now = A[i - 1] + B[i + 1];if (now.x1 <= now.x2&&now.y1 <= now.y2) {printf("%d %d", now.x1, now.y1);return 0;}}return 0;
}