poj1151 Atlantis && cdoj 1600艾尔大停电 矩形面积并
题目:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 23758 | Accepted: 8834 |
Description
Input
The input file is terminated by a line containing a single 0. Don't process it.
Output
Output a blank line after each test case.
Sample Input
- 2
- 10 10 20 20
- 15 15 25 25.5
- 0
Sample Output
- Test case #1
- Total explored area: 180.00
Source
- #include <cstdio>
- #include <iostream>
- #include <cmath>
- #include <algorithm>
- #include <cstring>
- using namespace std;
- #define MP make_pair
- #define PB push_back
- typedef long long LL;
- typedef pair<int,int> PII;
- const double eps=1e-;
- const double pi=acos(-1.0);
- const int K=3e2+;
- const int mod=1e9+;
- struct node
- {
- int f;
- double l,r,y;
- bool operator < (const node &ta)const
- {
- return y<ta.y;
- }
- }seg[K*];
- int cover[K*];
- double sum[K*],hs[K*];
- void push_up(int o,int l,int r)
- {
- if(cover[o]) sum[o]=hs[r+]-hs[l];
- else if(l==r) sum[o]=;
- else sum[o]=sum[o<<]+sum[o<<|];
- }
- void update(int o,int l,int r,int nl,int nr,int f)
- {
- if(l==nl&&r==nr)
- cover[o]+=f,push_up(o,l,r);
- else
- {
- int mid=l+r>>;
- if(nr<=mid) update(o<<,l,mid,nl,nr,f);
- else if(nl>mid) update(o<<|,mid+,r,nl,nr,f);
- else update(o<<,l,mid,nl,mid,f),update(o<<|,mid+,r,mid+,nr,f);
- push_up(o,l,r);
- }
- }
- int main(void)
- {
- int n,cs=;
- while(scanf("%d",&n)&&n)
- {
- int cnt=;
- double ans=;
- memset(cover,,sizeof cover);
- memset(sum,,sizeof sum);
- for(int i=;i<=n;i++)
- {
- double lx,ly,rx,ry;
- scanf("%lf%lf%lf%lf",&lx,&ly,&rx,&ry);
- seg[cnt+].l=seg[cnt+].l=lx;
- seg[cnt+].r=seg[cnt+].r=rx;
- seg[cnt+].y=ry,seg[cnt+].y=ly;
- seg[cnt+].f=,seg[cnt+].f=-;
- hs[cnt+]=lx,hs[cnt+]=rx;
- cnt+=;
- }
- sort(seg+,seg++n*);
- sort(hs+,hs++*n);
- int sz=unique(hs+,hs++n*)-hs;
- for(int i=;i<*n;i++)
- {
- int l=lower_bound(hs+,hs+sz,seg[i].l)-hs;
- int r=lower_bound(hs+,hs+sz,seg[i].r)-hs;
- update(,,sz,l,r-,seg[i].f);
- ans+=sum[]*(seg[i+].y-seg[i].y);
- }
- printf("Test case #%d\nTotal explored area: %.2f\n\n",cs++,ans);
- }
- return ;
- }
poj1151 Atlantis && cdoj 1600艾尔大停电 矩形面积并的更多相关文章
- [POJ1151]Atlantis
[POJ1151]Atlantis 试题描述 There are several ancient Greek texts that contain descriptions of the fabled ...
- Three.js 火焰效果实现艾尔登法环动态logo 🔥
声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 <艾尔登法环>是最近比较火的一款游戏,观察可以发现它的 Log ...
- (HDU 1542) Atlantis 矩形面积并——扫描线
n个矩形,可以重叠,求面积并. n<=100: 暴力模拟扫描线.模拟赛大水题.(n^2) 甚至网上一种“分块”:分成n^2块,每一块看是否属于一个矩形. 甚至这个题就可以这么做. n<=1 ...
- HDU 1542 Atlantis(矩形面积并)
HDU 1542 Atlantis 题目链接 题意:给定一些矩形,求面积并 思路:利用扫描线,因为这题矩形个数不多,直接暴力扫就能够了.假设数据大.就要用线段树 代码: #include <cs ...
- POJ 1151 Atlantis 线段树求矩形面积并 方法详解
第一次做线段树扫描法的题,网搜各种讲解,发现大多数都讲得太过简洁,不是太容易理解.所以自己打算写一个详细的.看完必会o(∩_∩)o 顾名思义,扫描法就是用一根想象中的线扫过所有矩形,在写代码的过程中, ...
- 【HDU 1542】Atlantis 矩形面积并(线段树,扫描法)
[题目] Atlantis Problem Description There are several ancient Greek texts that contain descriptions of ...
- 10.我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形. 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 是不是发现看不懂,哈哈:编程题就是这样,一定要归纳,手写过程: n ...
- poj-1151矩形面积并-线段树
title: poj-1151矩形面积并-线段树 date: 2018-10-30 22:35:11 tags: acm 刷题 categoties: ACM-线段树 概述 线段树问题里的另一个问题, ...
- hdu 1542&&poj 1151 Atlantis[线段树+扫描线求矩形面积的并]
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
随机推荐
- Python 中文乱码
1.首行添加 # -*- coding:gb2312 -*- # -*- coding:utf-8 -*- 2.PyCharm设置 在File->setting->File Encodin ...
- ch6-定制数据对象(打包代码和数据)
为了看出数据属于哪个选手,教练向各个选手的数据文件中添加了标识数据:选手全名,出生日期,计时数据. 例如:sarah文件的数据更新为: Sarah Sweeney,2002-6-17,2:58,2.5 ...
- Python 使用正则表达式匹配电话号码
一个电话号码,如果区号为3位,那么区号后面的数字为8位:如果区号为4位,那么区号后面的数字为7位 In [1]: import re In [2]: number = "020-232432 ...
- getViewTreeObserver
在项目中或多或少会遇一一些异步的操作,比如自定中不能马上获取到高度用测试可以得到.. final View headerView = View.inflate(this, R.layout.layou ...
- 【Linux系列】find命令使用
Linux下find命令在目录结构中搜素文件,病执行制定的操作. 一.命令格式 find pathname -options[-print -exec -ok] 二.命令功能 用于在文件树种查找文件, ...
- JavaWeb温习之Cookie对象
1. 会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话.有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...
- log4j和commons- logging(好文整理转载)
一 :为什么同时使用commons-logging和Log4j?为什么不仅使用其中之一? Commons-loggin的目的是为 “所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱( ...
- docker swarm+register-web+shipyard搭建
1.swarm安装 swarm安装有很多种服务注册的方式,token.etcd.zookeeper,本文主要以swarm默认的token方式进行安装.因为最新的docker已经集成了swarm,所以从 ...
- JS拖拽事件
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JS生成GUID方法
function GUID() { this.date = new Date(); /* 判断是否初始化过,如果初始化过以下代码,则以下代码将不再执行,实际中只执行一次 */ if (typeof t ...