热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

POJ1151Atlantis(离散化求矩形面积并)

题意:在二维平面上给出n个矩形的顶点坐标(浮点数),每个矩形的边都平行坐标轴,求矩形覆盖的面积。数据范围:n<100,0<x,y<100000分析:由于n比较小,所以用

题意:在二维平面上给出n个矩形的顶点坐标(浮点数),每个矩形的边都平行坐标轴,求矩形覆盖的面积。

数据范围:n<=100,  0=

分析:由于n比较小,所以用离散化就能过(离散化的具体分析见上一篇)。

View Code
#include 
#include
<string.h>
#include

#define N 110
int n;
double xl[N],yl[N];
double xr[N],yu[N];
double x[2*N],y[2*N];
int xcnt,ycnt;
bool flag[2*N][2*N];

int cmp(const void *a,const void *b)
{
return *(double*)a>*(double*)b?1:-1;
}
void init()
{
xcnt
=ycnt=0;
memset(flag,
0,sizeof(flag));
}
void read()
{
double a,b,c,d;
for(int i=0;i)
{
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
xl[i]
=a; yl[i]=b;
xr[i]
=c; yu[i]=d;

x[xcnt
++]=a; x[xcnt++]=c;
y[ycnt
++]=b; y[ycnt++]=d;
}
}
int bsx(double k)
{
int min=0,max=xcnt,mid;
while(min+1!=max)
{
mid
=min+max>>1;
if(x[mid]>k) max=mid;
else min=mid;
}
return min;
}
int bsy(double k)
{
int min=0,max=ycnt,mid;
while(min+1!=max)
{
mid
=min+max>>1;
if(y[mid]>k) max=mid;
else min=mid;
}
return min;
}
void solve()
{
int i,j,k;
qsort(x,xcnt,
sizeof(x[0]),cmp);
qsort(y,ycnt,
sizeof(y[0]),cmp);

k
=xcnt;
xcnt
=0;
x[xcnt
++]=x[0];
for(i=1;iif(x[xcnt-1]!=x[i]) x[xcnt++]=x[i];


k
=ycnt;
ycnt
=0;
y[ycnt
++]=y[0];
for(i=1;iif(y[ycnt-1]!=y[i]) y[ycnt++]=y[i];

int a,b,c,d;
for(k=0;k)
{
a=bsx(xl[k]); b=bsy(yl[k]);
c
=bsx(xr[k]); d=bsy(yu[k]);
for(i=a;i)
{
for(j=b;jtrue;
}
}
double ans=0;
for(i=0;i1;i++)
{
for(j=0;j1;j++) if(flag[i][j]) ans+=(x[i+1]-x[i])*(y[j+1]-y[j]);
}
printf(
"Total explored area: %.2lf\n\n",ans);
}
int main()
{
int kase=0;
while(scanf("%d",&n),n)
{
init();
read();
printf(
"Test case #%d\n",++kase);
solve();
}
return 0;
}

 


推荐阅读
  • 题目描述:Balala Power! 时间限制:4000/2000 MS (Java/Other) 内存限制:131072/131072 K (Java/Other)。题目背景及问题描述详见正文。 ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • UVa 11683: 激光雕刻技术解析
    自1958年发明以来,激光技术已在众多领域得到广泛应用,包括电子设备、医疗手术工具、武器等。本文将探讨如何使用激光技术进行材料雕刻,并通过编程解决一个具体的激光雕刻问题。 ... [详细]
  • 题目概述:Sereja 拥有一个由 n 个整数组成的数组 a1, a2, ..., an。他计划执行 m 项操作,这些操作包括更新数组中的特定元素、增加数组中所有元素的值,以及查询数组中的特定元素。 ... [详细]
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • 本文介绍了一种使用链剖分(Link-Cut Tree, LCT)来维护动态树结构的方法,特别是如何通过 LCT 来高效地管理子树的信息,如子树大小等。 ... [详细]
  • 在学习了Splay树的基本查找功能后,可能会觉得它与普通的二叉查找树没有太大的区别,仅仅是通过splay操作减少了时间开销。然而,Splay树之所以被誉为“序列之王”,主要在于其强大的区间操作能力。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • STM32代码编写STM32端不需要写关于连接MQTT服务器的代码,连接的工作交给ESP8266来做,STM32只需要通过串口接收和发送数据,间接的与服务器交互。串口三配置串口一已 ... [详细]
  • Android 开发技巧:使用 AsyncTask 实现后台任务与 UI 交互
    本文详细介绍了如何在 Android 应用中利用 AsyncTask 来执行后台任务,并及时将任务进展反馈给用户界面,提高用户体验。 ... [详细]
  • 本文介绍了一个来自AIZU ONLINE JUDGE平台的问题,即清洁机器人2.0。该问题来源于某次编程竞赛,涉及复杂的算法逻辑与实现技巧。 ... [详细]
author-avatar
DZ---Shanghai
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有