故事的开头总是极尽温柔,故事会一直温柔……💜
✨你好啊,我是“ 怪& ”,是一名在校大学生哦。
🌍主页链接:怪&的个人博客主页
☀️博文主更方向为:课程学习知识、作业题解、期末备考。随着专业的深入会越来越广哦…一起期待。
❤️一个“不想让我曾没有做好的也成为你的遗憾”的博主。
💪很高兴与你相遇,一起加油!
一、🌳代码如下:
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
typedef long long ll;
ll s_in=0;
int n,a,b;
int x1,y1,x2,y2;
int main(){
cin>>n>>a>>b;
for(int cnt=0; cnt<n; cnt++){
cin>>x1>>y1>>x2>>y2;
x1=max(0,x1);x1=min(a,x1); // x range [0,a]
x2=max(0,x2);x2=min(a,x2);
y1=max(0,y1);y1=min(b,y1); // y range [0,b]
y2=max(0,y2);y2=min(b,y2);
s_in += (y2-y1)*(x2-x1);
}
cout<<s_in<<endl;
return 0;
}
二、🌵解题思路
求解:绿色区域面积
题意抽象:“已存在的n块田地”属于“新开田地的面积”。
计算抽象:要用在“新开田地的区域”内坐标来表示已有的田地。
- 横坐标:x属于[0,a]
- 纵坐标:y属于[0,b]
坐标更新:
x1=max(0,x1);x1=min(a,x1); // x range [0,a]
x2=max(0,x2);x2=min(a,x2);
y1=max(0,y1);y1=min(b,y1); // y range [0,b]
y2=max(0,y2);y2=min(b,y2);
更新后结果(包含新开田地的区域边界,即图中虚线的绿色部分也是一块田地):
计算面积:
s_in += (y2-y1)*(x2-x1);
穷尽每个已存在田地,即可完成求解。