NKOJ 1353 图形面积
|
问题描述
桌面上放了N个矩形,这N个矩形可能有互相覆盖的部分,求它们组成的图形的面积。(矩形的边都与坐标轴平行)
输入格式
输入第一行为一个数N(1≤N≤100),表示矩形的数量。下面N行,每行四个整数,分别表示每个矩形的左下角和右上角的坐标,坐标范围为 到 之间的整数。
输出格式
输出只有一行,一个整数,表示图形的面积。
样例输入
3
1 1 4 3
2 -1 3 2
4 0 5 2
样例输出
10
#include<cstdio>
#include<cmath>
#include<cctype>
#include<algorithm>
#define ll long long
#define maxn 203
using namespace std;
int n, tot_x, tot_y;
ll ans;
ll X[maxn], Y[maxn], Renew_X[maxn], Renew_Y[maxn], Map[maxn][maxn];
char buf[ << ], *p1 = buf, *p2 = buf, obuf[ << ], *O = obuf;
bool Mark[maxn][maxn];
struct node {
ll x1, x2, y1, y2, xx1, xx2, yy1, yy2;
}Pair[maxn];
namespace Ironclad_Programming {
#define R register int
#define For(i, s, n) for (R i = s; i <= n; ++ i)
#define Getch() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1 ++)
inline ll read() {
int x = , f = ;
char ch = Getch();
while(!isdigit(ch)){if (ch == '-')f = -; ch = Getch();}
while(isdigit(ch))x = x * + (ch ^ ), ch = Getch();
return x * f;
}
void write(ll x) {
if (x > ) write(x / );
*O ++ = x % + '';
}
namespace ini {
int j = ;
void Discretization() {
Renew_X[] = abs(X[]);
Renew_Y[] = abs(Y[]);
For (i, , * n) {
if (X[i] > X[i - ]) {
Renew_X[++ tot_x] = X[i] - X[i - ];
X[tot_x] = X[i];
}
if (Y[i] > Y[i - ]) {
Renew_Y[++ tot_y] = Y[i] - Y[i - ];
Y[tot_y] = Y[i];
}
}
}
void Convert() {
int j;
For (i, , n) {
j = lower_bound(X + , X + tot_x, Pair[i].x1) - X;
if (X[j] == Pair[i].x1)Pair[i].xx1 = j;
j = lower_bound(X + , X + tot_x, Pair[i].x2) - X;
if (X[j] == Pair[i].x2)Pair[i].xx2 = j;
j = lower_bound(Y + , Y + tot_y, Pair[i].y1) - Y;
if (Y[j] == Pair[i].y1)Pair[i].yy1 = j;
j = lower_bound(Y + , Y + tot_y, Pair[i].y2) - Y;
if (Y[j] == Pair[i].y2)Pair[i].yy2 = j;
}
}
void executive() {
n = read();
For (i, , n) {
Pair[i].x1 = read(), Pair[i].y1 = read(), Pair[i].x2 = read(), Pair[i].y2 = read();
++ j;
X[j] = Pair[i].x1;
Y[j] = Pair[i].y1;
++ j;
X[j] = Pair[i].x2;
Y[j] = Pair[i].y2;
}
sort(X + , X + * n + );
sort(Y + , Y + * n + );
Discretization();
Convert();
}
}
void solve() {
For (i, , tot_y)
For (j, , tot_x)
Map[i][j] = Renew_Y[i] * Renew_X[j];
For (i, , n)
For (j, Pair[i].yy1 + , Pair[i].yy2)
For (k, Pair[i].xx1 + , Pair[i].xx2)
Mark[j][k] = ;
For (i, , tot_y)
For (j, , tot_x)
if (Mark[i][j])
ans += Map[i][j];
write(ans);
}
void Main() {
ini::executive();
solve();
fwrite(obuf, O - obuf, , stdout);
}
#undef R
#undef For
#undef Getch
}
int main() {
Ironclad_Programming::Main();
return ;
}
NKOJ 1353 图形面积的更多相关文章
- 前端学PHP之面向对象系列第六篇——简单图形面积计算器实现
前面的话 本文用面向对象的技术来实现一个简单的图形面积计算器 图形类 //rect.class.php <?php abstract class Shape{ public $name; abs ...
- 递推DP URAL 1353 Milliard Vasya's Function
题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...
- URAL 1353 Milliard Vasya's Function(DP)
题目链接 题意 : 让你找出1到10^9中和为s的数有多少个. 思路 : 自己没想出来,看的题解,学长的题解报告 题解报告 //URAL 1353 #include <iostream> ...
- ural 1353. Milliard Vasya's Function
http://acm.timus.ru/problem.aspx?space=1&num=1353 #include <cstdio> #include <cstring&g ...
- C++习题 虚函数-计算图形面积
C++习题 虚函数-计算图形面积 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 122 Solved: 86 [cid=1143&pid=6 ...
- ural 1353. Milliard Vasya's Function(背包/递归深搜)
1353. Milliard Vasya's Function Time limit: 1.0 second Memory limit: 64 MB Vasya is the beginning ma ...
- ural 1353. Milliard Vasya's Function(dp)
1353. Milliard Vasya's Function Time limit: 1.0 second Memory limit: 64 MB Vasya is the beginning ma ...
- 51nod 1353 树 | 树形DP经典题!
51nod 1353 树 | 树形DP好题! 题面 切断一棵树的任意条边,这棵树会变成一棵森林. 现要求森林中每棵树的节点个数不小于k,求有多少种切法. 数据范围:\(n \le 2000\). 题解 ...
- C++继承与多态练习--计算图形面积
1.目的: /*设计一个计算图形面积的类库. 类库的顶层是一个抽象类,并且提供三个纯虚函数:显示数据成员.返回面积和返回体积. Class Shape { virtual void showData( ...
随机推荐
- 【猫狗数据集】谷歌colab之使用pytorch读取自己数据集(猫狗数据集)
之前在:https://www.cnblogs.com/xiximayou/p/12398285.html创建好了数据集,将它上传到谷歌colab 在colab上的目录如下: 在utils中的rdat ...
- .Net Core 为 x86 和 x64 程序集编写 AnyCPU 包装
前言 这几天研究了一下 vJoy 这个虚拟游戏手柄驱动,感觉挺好玩的.但是使用时发现一个问题,C# SDK 中的程序集被分为 x86 和 x64 两个版本,如果直接在 AnyCPU 平台编译运行就有隐 ...
- MyBatis 源码分析-项目总览
MyBatis 源码分析-项目总览 1.概述 本文主要大致介绍一下MyBatis的项目结构.引用参考资料<MyBatis技术内幕> 此外,https://mybatis.org/mybat ...
- Mysql(Mariadb)慢查询日志中long_query_time 与log_queries_not_using_indexes与min_examined_row_limit 关系分析
慢查询日志中long_query_time 与log_queries_not_using_indexes与min_examined_row_limit 关系分析 参数介绍: long_query_ ...
- django 从零开始 11 根据时间戳加密数据
django自带一个加密的方法signer,对数据进行一个加密 一般这种方式用于账号密码邮箱找回,或者token设置 class TimestampSigner(Signer): def timest ...
- (转)协议森林05 我尽力 (IP协议详解)
协议森林05 我尽力 (IP协议详解) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! IPv4与IPv6头部的对比 我们已经在I ...
- dpdk中QSBR具体实现
目录 dpdk-QSBR实现 初始化 注册与注销 上线与下线 等待静默 附录 参考 dpdk-QSBR实现 dpdk19.01提供了qsbr模式的rcu库,其具体实现在lib/librte_rcu目录 ...
- Mol Cell Proteomics. | Mapping Spatio-temporal Microproteomics Landscape in Experimental Model of Traumatic Brain Injury Unveils a link to Parkinson’s Disease
期刊:Molecular & Cellular Proteomics 发表时间:June 16, 2019 通讯作者:Michel Salzet,Isabelle Fournier 一. 概 ...
- abp(net core)+easyui+efcore实现仓储管理系统——入库管理之五(四十一)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- .NET Core技术研究-HttpContext访问的正确姿势
将ASP.NET升级到ASP.NET Core之后,相信大家都会遇到HttpContext.Current无法使用的问题.这也是我们迁移ASP.NET Core必须解决的问题. 本文我们详细讨论一下, ...