时间限制 : 10000 MS   空间限制 : 65536 KB
问题描述

桌面上放了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 图形面积的更多相关文章

  1. 前端学PHP之面向对象系列第六篇——简单图形面积计算器实现

    前面的话 本文用面向对象的技术来实现一个简单的图形面积计算器 图形类 //rect.class.php <?php abstract class Shape{ public $name; abs ...

  2. 递推DP URAL 1353 Milliard Vasya's Function

    题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...

  3. URAL 1353 Milliard Vasya's Function(DP)

    题目链接 题意 : 让你找出1到10^9中和为s的数有多少个. 思路 : 自己没想出来,看的题解,学长的题解报告 题解报告 //URAL 1353 #include <iostream> ...

  4. ural 1353. Milliard Vasya's Function

    http://acm.timus.ru/problem.aspx?space=1&num=1353 #include <cstdio> #include <cstring&g ...

  5. C++习题 虚函数-计算图形面积

    C++习题 虚函数-计算图形面积 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 122  Solved: 86 [cid=1143&pid=6 ...

  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 ...

  7. 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 ...

  8. 51nod 1353 树 | 树形DP经典题!

    51nod 1353 树 | 树形DP好题! 题面 切断一棵树的任意条边,这棵树会变成一棵森林. 现要求森林中每棵树的节点个数不小于k,求有多少种切法. 数据范围:\(n \le 2000\). 题解 ...

  9. C++继承与多态练习--计算图形面积

    1.目的: /*设计一个计算图形面积的类库. 类库的顶层是一个抽象类,并且提供三个纯虚函数:显示数据成员.返回面积和返回体积. Class Shape { virtual void showData( ...

随机推荐

  1. python学习-练习题兔子生长问题巩固

    有一对兔子,一个月之后成熟,成熟之后每个月会生出一对兔子,理想状态下兔子不会死,请问n个月后有多少兔子? 分析:第一个月:1 第二个月:1 第三个月:2 第四个月:3 第五个月:5 第六个月:8 从前 ...

  2. django 从零开始 6 数据库模型增删改查

    这些都是凭记忆写下的,有些会漏掉,在之后的笔记中会写 和flask query不同,django是使用objects进行一个查询 查询 单条记录 django 模型.bojects.get(查询的字段 ...

  3. python的基本数据类型简介

    python的基本数据类型有:数字-numbers.字符串-str.列表-list.元组-tuple.字典-dict.布尔-bool.集合-set 下面来个概览先大概了解一下,后面博文中咱再细说- 1 ...

  4. Tomcat起不来的原因

    1.没有配java_home Tomcat是Java编写的,所以必须要java_home 2.端口被占用 怎么查看端口被占用呢?——windows 小工具:Fport.exe 3.Catalina_h ...

  5. mongo复制数据库和表

    1.使用工具Studio 3T for MongoDB 选择一个数据库中的Collections集合,然后按住 Ctrl+C 复制快捷键会弹出如下帮助框. 点击 Ctrl+V 粘贴快捷键,重命名一下复 ...

  6. [BUG]微信小程序生成小程序码"小程序页面路径不存在,请重新输入"

    描述 小程序页面线上能打开. 微信官方 获取小程序页面小程序码 页面 ,输入 小程序页面路径,提示 "小程序页面路径不存在,请重新输入". 使用微信复制小程序路径方法, 也是同样的 ...

  7. javaScript 基础知识汇总 (十五)

    1.模块简介 什么是模块: 模块就是一个文件,一个脚本,通过关键字export 和 import 交换模块之间的功能. export 关键字表示在当前模块之外可以访问的变量和功能. import 关键 ...

  8. 聊聊 WebSocket,还有 HTTP

    还记得曾经风靡一时的 QQ 秀聊天室吗?那时,还在上初.高中的我们,QQ 是最常用的聊天交友工具:而 QQ 秀聊天室的出现打破了只能按条件查找好友的局限性,大家可以随意进入聊天室房间,进行在线聊天.怀 ...

  9. 学习scrapy爬虫框架的一些经验和教训

    首先python的scrapy框架很好,功能强大,使用起来也很方便,省去了很多造轮子的时间.在学习的过程中也碰到了一些问题,在这里希望能分享与大家分享,做一个参考 1.安装(pip延时响应问题) sc ...

  10. MyBatis框架——多表查询

    MyBatis多表查询, 从表中映射主表,使用 association 标签,通过设置 javaType 属性关联实体类: 主表映射从表,使用 collection 标签,通过 ofType 属性关联 ...