JSOI2012-夏令营 Mar Maps

火星探险

源程序名    MAR.??? (PAS,C,CPP)

输入文件名   MAR.IN

输出文件名     MAR.OUT

时间限制      1S

问题描述:

在2051年,若干火星探险队探索了这颗红色行星的不同的区域并且制作了这些区域的地图。现在, Baltic空间机构有一个雄心勃勃的计划:他们想制作一张整个行星的地图。为了考虑必要的工作,他们需要知道地图上已经存在的全部区域的大小。你的任务是写一个计算这个区域大小的程序。

任务:

l         从输入文件 mar.in 读取地图形状的描述

l         计算地图覆盖的全部的区域

l         输出到输出文件mar.out

 

输入:

输入文件mar.in的第一行包含一个整数N(1<=N<=10000),表示可得到的地图数目。

以下N行,每行描述一张地图。

每行包含4个整数x1,y1,x2和y2(0<=x1<x2<=30000,0<=y1<y2<=30 000)。数值(x1,y1)和(x2,y2)是坐标,分别表示绘制区域的左上角和右下角坐标。每张地图是矩形的,并且它的边是平行与X坐标轴或Y坐标轴的。

输出:

输出文件 mar.out,应该包含一个整数,表示探索区域的总面积(即所有矩形的公共面积)。

样例:

MAR.IN

2
10 10 20 20
15 15 25 30

MAR.OUT

225

又见模板题  T_T。。没办法就是这么水。。

不过是第一次学习扫描线统计周长面积什么的

Codes:

 1 #include<set>
 2 #include<queue>
 3 #include<vector>
 4 #include<cstdio>
 5 #include<cstdlib>
 6 #include<cstring>
 7 #include<iostream>
 8 #include<algorithm>
 9 using namespace std;
10 const int N = 30010;
11 #define Ch1 (i<<1)
12 #define Ch2 (Ch1|1)
13 #define mid(i) T[i].mid
14 #define len(i) T[i].r-T[i].l
15 #define For(i,n) for(int i=1;i<=n;i++)
16 #define Rep(i,l,r) for(int i=l;i<=r;i++)
17
18 struct lines{
19     int l,r,h,kind;
20 }L[N];
21
22 struct tnode{
23     int l,r,mid;
24     int cover,len;
25 }T[N<<2];
26
27 int n,tot,x1,y1,x2,y2,Lim,ans;
28
29 bool cmp(lines A,lines B){
30     return A.h<B.h;
31 }
32
33 void Build(int l,int r,int i){
34     T[i].l = l; T[i].r = r; T[i].mid = (l+r)>>1;
35     if(l==r-1) return;
36     Build(l,mid(i),Ch1);Build(mid(i),r,Ch2);
37 }
38
39 void Modify(int l,int r,int delta,int i){
40     if(l<=T[i].l&&T[i].r<=r){
41         T[i].cover+=delta;
42         if(T[i].cover) T[i].len = len(i); else
43         if(l==r-1)     T[i].len = 0;      else
44                        T[i].len = T[Ch1].len + T[Ch2].len;
45         return;
46     }
47     if(r<=mid(i))  Modify(l,r,delta,Ch1);else
48     if(l>=mid(i))  Modify(l,r,delta,Ch2);else
49     Modify(l,mid(i),delta,Ch1),Modify(mid(i),r,delta,Ch2);
50     if(T[i].cover) T[i].len = len(i);
51     else           T[i].len = T[Ch1].len + T[Ch2].len;
52 }
53
54 void init(){
55     scanf("%d",&n);
56     For(i,n){
57         scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
58         L[++tot].l = x1; L[tot].r = x2; L[tot].h = y1;L[tot].kind = 0;
59         L[++tot].l = x1; L[tot].r = x2; L[tot].h = y2;L[tot].kind = 1;
60         Lim = max(Lim,x2);
61     }
62     sort(L+1,L+tot+1,cmp);
63     Build(0,Lim,1);L[0].h = L[1].h;
64 }
65
66 int main(){
67     freopen("mar.in","r",stdin);
68     freopen("mar.out","w",stdout);
69     init();
70     For(i,tot){
71         if(!L[i].kind){
72             ans+=T[1].len*(L[i].h-L[i-1].h);
73             Modify(L[i].l,L[i].r,1,1);
74         }else{
75             ans+=T[1].len*(L[i].h-L[i-1].h);
76             Modify(L[i].l,L[i].r,-1,1);
77         }
78     }
79     cout<<ans<<endl;
80     return 0;
81 }

JSOI2012-夏令营 Mar Maps,布布扣,bubuko.com

时间: 2024-10-12 12:31:46

JSOI2012-夏令营 Mar Maps的相关文章

[Baltic 2001]Mars Maps

Description In the year 2051, several Mars expeditions have explored different areas of the red planet and produced maps of these areas. Now, the BaSA (Baltic Space Agency) has an ambitious plan: they would like to produce a map of the whole planet.

【BZOJ】1382: [Baltic2001]Mars Maps (线段树+扫描线)

1382: [Baltic2001]Mars Maps Time Limit: 5 Sec  Memory Limit: 64 MB Description 给出N个矩形,N<=10000.其坐标不超过10^9.求其面积并 Input 先给出一个数字N,代表有N个矩形. 接下来N行,每行四个数,代表矩形的坐标. Output 输出面积并 Sample Input 2 10 10 20 20 15 15 25 30 Sample Output 225 本以为是傻逼题,没想到不容易啊- 线段树+扫描

在Google Maps 上点击标签后显示说明

JS如下: (function() { ????window.onload = function() { ? ????????// Creating an object literal containing the properties ????????// you want to pass to the map ????????var options = { ????????????zoom: 3, ????????????center: new google.maps.LatLng(37.0

1639: [Usaco2007 Mar]Monthly Expense 月度开支

1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 593  Solved: 295[Submit][Status] Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100,000)个工作日中每一天的花费moneyi(1<=money

[BZOJ] 1639: [Usaco2007 Mar]Monthly Expense 月度开支

1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1077  Solved: 533[Submit][Status][Discuss] Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100,000)个工作日中每一天的花费moneyi(1

[BZOJ1639][Usaco2007 Mar]Monthly Expense 月度开支

1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1069  Solved: 530 [Submit][Status][Discuss] Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100,000)个工作日中每一天的花费moneyi

[BZOJ1617][Usaco2008 Mar]River Crossing渡河问题

1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1102  Solved: 801 [Submit][Status][Discuss] Description Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木筏上.在这个基础上,木筏上的奶牛数

笔记:MyBatis Mapper XML文件详解 - Result Maps

Result Maps(结果集) resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事 情. 事实上, 编写相似于对复杂语句联合映射这些等同的代码, 也许可以跨过上千行的代码. ResultMap 的设计就是简单语句不需要明确的结果映射,而很多复杂语句确实需要描述它们 的关系,你已经看到简单映射语句的示例了,但没有明确的 resultMap.比如: <s

Win8.1应用开发之Bing Maps

这里介绍怎样进行Bing Maps的开发.首先我们须要在我们的程序中引入Bing Map的SDK.详细方法,这里推荐一个链接<win8>使用Bing地图.这样一个hello world便出来了.这里主要介绍一些主要的API.进行一些基础性的开发. 在整个开发中,给我感触最深的是.在网上资料稀少的情况下.查看研究Bing Map给出的API是最有效的方法(Map API). 或许API的凝视是模棱两可,但仅仅要我们去试.便能了解这些方法的功能. 假设遇到hello world不能显示地图,在C#