http://poj.org/problem?id=1151

题意:给出矩形的左上角坐标和右下角坐标(坐标的y轴是向下的),求出矩形面积的并。。

今天好困啊。。迷迷糊糊的听会神给讲了讲,敲完之后调试了好久。。原来存错数组了。。看来意识模糊的时候不适宜敲题。

 #include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N=; struct node
{
double x1,y1,x2,y2;
} p[N];
double X[N],Y[N];
bool vis[N][N]; void init()
{
memset(vis,,sizeof(vis));
memset(X,,sizeof(X));
memset(Y,,sizeof(Y));
}
int BinSearch(double *f,int l,int r,double key)
{
while(l <= r)
{
int mid = (l+r)>>;
if (f[mid]==key)
return mid;
else if (key < f[mid])
r = mid-;
else
l = mid+;
}
}
int main()
{
int o = ,n;
while(~scanf("%d",&n)&&n)
{
o++;
init();
int m1=,m2=;
for (int i = ; i < n; i++)
{
scanf("%lf%lf%lf%lf",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2);
X[m1++] = p[i].x1;
Y[m2++] = p[i].y1;
X[m1++] = p[i].x2;
Y[m2++] = p[i].y2;
}
sort(X,X+m1);
sort(Y,Y+m2);
for (int i = ; i < n; i++)
{
int px1 = BinSearch(X,,m1-,p[i].x1);
int py1 = BinSearch(Y,,m2-,p[i].y1);
int px2 = BinSearch(X,,m1-,p[i].x2);
int py2 = BinSearch(Y,,m2-,p[i].y2);
for (int i = px1; i < px2; i++)
{
for (int j = py1; j < py2; j++)
vis[i][j] = true;
} }
double area = ;
for (int i = ; i < m1; i++)
{
for (int j = ; j < m2; j++)
{
if (vis[i][j])
{
area += (X[i+]-X[i])*(Y[j+]-Y[j]);
}
}
}
printf("Test case #%d\n",o);
printf("Total explored area: %.2f\n",area);
puts("");
}
return ;
}

Atlantis(坐标离散化)的更多相关文章

  1. AOJ 0531 坐标离散化

    涂色:(日文题目,自己翻译成了中文)为了宣传信息竞赛,要在长方形的三合板上喷油漆来制作招牌.三合板上不需要涂色的部分预先贴好了护板.被护板隔开的区域要涂上不同的颜色,比如上图就应该涂上5种颜色. 请编 ...

  2. Aizu 0531 "Paint Color" (坐标离散化+DFS or BFS)

    传送门 题目描述: 为了宣传信息竞赛,要在长方形的三合板上喷油漆来制作招牌. 三合板上不需要涂色的部分预先贴好了护板. 被护板隔开的区域要涂上不同的颜色,比如上图就应该涂上5种颜色. 请编写一个程序计 ...

  3. poj 1151 Atlantis (离散化 + 扫描线 + 线段树 矩形面积并)

    题目链接题意:给定n个矩形,求面积并,分别给矩形左上角的坐标和右上角的坐标. 分析: 映射到y轴,并且记录下每个的y坐标,并对y坐标进行离散. 然后按照x从左向右扫描. #include <io ...

  4. POJ 1151 Atlantis(离散化)

    点我看题目 题意 : 就是给你n个矩形的最左下角和最右上角的点的坐标,然后将这n个矩形的面积求出来. 思路 : 离散化求矩形面积并.离散化具体介绍.将横纵坐标离散开来分别存,然后排序,也可以按照黑书上 ...

  5. HDU-1542 Atlantis(离散化+扫描线)

    题目大意:给n个矩形,可能重叠,求面积. 题目分析:线段树维护扫描线. 代码如下: # include<bits/stdc++.h> using namespace std; # defi ...

  6. nyoj_600:花儿朵朵(树状数组+坐标离散化)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=600 只附代码好了 #include<bits/stdc++.h> using name ...

  7. 【坐标离散化】AOJ0531- Paint Color

    日文题……一开始被题目骗了以为真的要写文件? 题目大意&&解答戳:❀ #include<iostream> #include<cstdio> #include& ...

  8. hihoCoder#1079(线段树+坐标离散化)

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学 ...

  9. nyoj 600:花儿朵朵(树状数组+坐标离散化)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=600 只附代码好了 #include<bits/stdc++.h> using name ...

随机推荐

  1. STL源码分析之第二级配置器

    前言 第一级是直接调用malloc分配空间, 调用free释放空间, 第二级三就是建立一个内存池, 小于128字节的申请都直接在内存池申请, 不直接调用malloc和free. 本节分析第二级空间配置 ...

  2. NOIP 2008 传纸条(洛谷P1006,动态规划递推,滚动数组)

    题目链接:P1006 传纸条 PS:伤心,又想不出来,看了大神的题解 AC代码: #include<bits/stdc++.h> #define ll long long using na ...

  3. attack on titans(动态规划递推,限制条件,至少转至多方法,进击的巨人)

    题目意思: 给n个士兵排队,每个士兵三种G.R.P可选,求至少有m个连续G士兵,最多有k个连续R士兵的排列的种数. 原题 Attack on Titans Time Limit: 2 Seconds ...

  4. mysql5.7报Access denied for xxx@localhost 的解决

    使用root用户登录mysql数据库若如下报错 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...

  5. vcenter6.5安装问题

    vcenter6.5 有2个安装包1个vim (windows系统)   1个vcsa(linux) 安装vcsa遇到如下问题: 1.版本bug 网上一般找到的镜像是VMware-VCSA-all-6 ...

  6. js之字典操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 九度oj 题目1059:abc

    题目1059:abc 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4510 解决:3546 题目描述: 设a.b.c均是0到9之间的数字,abc.bcc是两个三位数,且有:abc+bcc ...

  8. RabbitMQ-rabbitmqctl多机多节点和单机多节点集群搭建(五)

    准备 1.准备3台物理机 我这里通过本地机和2台虚拟模拟我是mac通过(Parallel Desktop 实现) 2.按照签名的liux安装步骤在3台机器都安装rabiitMq 3.将任意一节点的co ...

  9. BZOJ5089: 最大连续子段和

    维护一个序列支持以下操作:区间加,区间求最大子段和.n<=50000,m<=50000. 我TM再也不写分块了... 先分块,对于块整体加的操作,假设块里面有若干二元组(x,y),表示一个 ...

  10. Eclipse Java Build Path详解

    Eclipse Java Build Path详解 1.设置"source folder"与"output folder". * source folder:存 ...