poj 1151 Atlantis(线段树+离散化+扫描线)

Android Qcom Display学习(十一) 该系列文章总目录链接与各部分简介:本章主要是基于MIPI Payload传输接口的学习,包括Generic和DCS的接口不同。底层都是基于去封装的,下面第一部分调用原生接口,第二部分分析高通是如何进行读写操作的。 阅读详情

题目大意:

        在一个平面上有n个矩形,他们可能有部分或全部相互重叠,问矩形的总覆盖面积是多少。

解题思路:

        ①用一条直线从左向右扫描,每碰到一条矩形的边,就计算当前直线上被矩形覆盖的长度,同时总覆盖面积 += 当前覆盖长度*当前直线到下一条边的距离。碰到矩形左边时,可能使被覆盖长度增加,碰到右边时,可能使长度减少。

        ②因为一条直线上的一段线段可能被多个矩形同时覆盖,为增加或减少长度是增加困难,所以在扫描时还要记录当前线段被覆盖了几层。

        ③因为数据是浮点数,所以需要进行离散化。

注意点:

         在输出时不知道为什么%.2lf不能过,使用%.2f就可以。

代码:

#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

struct node{
    int l,r;
    double length;//当前线段的被覆盖的长度
    int coverd;//当前线段被覆盖了几层
};

struct segment{
    double x,y1,y2;
    int isLeft;
};

bool operator < (segment a,segment b){
    return a.x < b.x;
}

int n;
node tree[805];
double line[205];
segment row[205];
int lineNum,rowNum;

void buildTree(int root,int l,int r){//建树
     tree[root].l = l;
     tree[root].r = r;
     tree[root].length = 0;
     tree[root].coverd = 0;
     if(l != r){
        int mid = (l+r)/2;
        buildTree(2*root,l,mid);
        buildTree(2*root+1,mid+1,r);
     }
}

int findPos(int l,int r,double x){//查询对应竖线的下标
     if(l > r) return -1;
     int mid = (l + r)/2;
     if(line[mid] == x){
        return mid;
     }
     else if(line[mid] < x){
        findPos(mid+1,r,x);
     }
     else{
        findPos(l,mid-1,x);
     }
}

void updata(int root,int l,int r,int v){//更新线段树
    if(tree[root].l == l && tree[root].r == r){
        tree[root].coverd += v;
        if(tree[root].coverd > 0){
            tree[root].length = line[r] - line[l-1];
        }
        else{//当此段未被完全覆盖
            if(l == r){//如果是叶节点,则覆盖长度为0
                tree[root].length = 0;
            }
            else{//不是叶节点时,覆盖长度为两个子节点长度的和
                tree[root].length = tree[2*root].length + tree[2*root+1].length;
            }
        }
        return;
    }
    int mid = (tree[root].l + tree[root].r)/2;
    if(r <= mid){
        updata(2*root,l,r,v);
    }
    else if(l > mid){
        updata(2*root+1,l,r,v);
    }
    else{
        updata(2*root,l,mid,v);
        updata(2*root+1,mid+1,r,v);
    }
    if(tree[root].coverd == 0){//若未被完全覆盖,则覆盖长度为两个子节点的和
        tree[root].length = tree[2*root].length + tree[2*root+1].length;
    }
}

int main()
{
    int t = 0;
    double x1,y1,x2,y2;
    while(cin >> n){
        if(n == 0) break;
        t ++;
        lineNum = 0;
        rowNum = 0;
        for(int i = 0; i < n; i ++){
            scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
            line[lineNum++] = y1;
            line[lineNum++] = y2;
            row[rowNum].x = x1;
            row[rowNum].y1 = y1;
            row[rowNum].y2 = y2;
            row[rowNum++].isLeft = 1;
            row[rowNum].x = x2;
            row[rowNum].y1 = y1;
            row[rowNum].y2 = y2;
            row[rowNum++].isLeft = -1;
        }
        sort(line,line+lineNum);
        sort(row,row+rowNum);
        lineNum = unique(line,line+lineNum) - line;
        buildTree(1,1,lineNum-1);
        double pos = 0,ans = 0;
        for(int i = 0; i < rowNum; i ++){
            ans += (row[i].x - pos) * tree[1].length;
            int up,down;
            up = findPos(0,lineNum-1,row[i].y1);
            down = findPos(0,lineNum-1,row[i].y2);
            updata(1,up+1,down,row[i].isLeft);
            pos = row[i].x;
        }
        printf("Test case #%d\n",t);
        printf("Total explored area: %.2f\n\n",ans);
    }
    return 0;
}



一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】 本文主要译至并加上了部分笔者的见解,对于全面理解LSTM有一定的帮助。 阅读详情

相关推荐

PyTorch 深度学习实战(28):对比学习(Contrastive Learning)与自监督表示学习

本文实现了基于对比学习的自监督表征学习框架,通过 InfoNCE 损失在 CIFAR-10 数据集上学习到具有判别性的特征表示。实验表明,仅使用线性分类器即可达到 82% 以上的验证准确率,证明了对比学习的有效性。在下一篇文章中,我们将深入计算机视觉的核心任务之一——《目标检测与 YOLO 实战》,探讨如何利用深度学习实现高效的目标检测系统。

m0_60414444的博客 2383

POJ 1151 Atlantis(扫描线法、线段树、离散化)

POJ 1151 Atlantis(扫描线法、线段树、离散化) 蓝书线段树练习题 POJ 1151 Atlantis 题意:给定n个矩形的左下、右上的两个坐标点(x,y)(x,y)(x,y),求他们的面积并(总面积) 数据范围:n:100、x/y:1e5n:100、x/y:1e5n:100、x/y:1e5 思路:现在好困明天再写^^ LL n; struct SegmentTree{ int ...

手扶拖拉机如何改装四驱 181

STK相关总结

STK简介 一.SIM卡应用工具包(SIM Application Toolkit),又名CAT/USAT,它包含一系列终端与SIM卡的交互指令,SIM卡可以应用卡内的小应用程序和终端交互,从而实现增值服务的目的,STK包括三种类,STK-imsi切换,STK –OTA,STK-BIP 功能: (1) Profile download:配置下载,开机初始化SIM卡过程中,终端告诉SIM卡终端支持哪些功能,STK中download指终端将数据发送给SIM卡 (2) Proactive command: 主动式

jingjing_2的博客 3356

POJ 1151 Atlantis 扫描线+离散化+线段树

/** * @file main.cpp * @brief 扫描线+离散化+线段树,题意是要求一堆矩形的总面积,需要处理矩形相交 * ac这道题着实让我为难了很久,第一次写扫描线,第一次接触离散化 * * 基本思路是这样: * 1. 构建平行于x轴的扫描线并进行排序 * 这样,任意两条扫描线之间的宽度乘以在高方向上的有效

ker1030的专栏 595

uniapp自定义tabbar闪屏?3步搞定原生tabbar隐藏+自定义占位(附完整代码)

本文针对UniApp开发中自定义TabBar切换页面闪烁的痛点,提供了一套根治方案。通过隐藏原生TabBar并利用自定义组件进行视觉占位,巧妙结合原生切换的无闪烁优势与自定义设计的灵活性。文章详细解析了闪屏根源,并附上完整的page.json配置与代码实现,帮助开发者彻底解决此问题,提升小程序应用质感。

postgres8guard的博客 1529

别再手动调参了!用MATLAB+改进PSO算法,5步搞定机械臂轨迹优化(附完整代码)

本文介绍如何利用MATLAB和改进PSO算法快速优化机械臂轨迹规划,仅需5步即可完成传统耗时的手动调参过程。通过混沌初始化、自适应权重等创新方法,改进PSO算法显著提升优化效率,实现全局最优解搜索,适用于工业自动化中的机械臂控制。文章包含完整MATLAB代码实现,帮助工程师轻松应用于实际生产场景。

weixin_29232121的博客 354

【POJ 1151】 Atlantis(线段树,扫描线,离散化)

文章目录题目DescriptionInputOutputSample InputSample OutputSource思路代码 题目 Description There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even i...

t14 的博客 296

告别Modern Standby噩梦:Win11睡眠断网冻结的根源剖析与S3睡眠回归实战

本文深入剖析了Windows 11中Modern Standby(现代待机)模式导致睡眠后断网、系统冻结等问题的根源,指出其与硬件驱动、后台活动的兼容性矛盾。文章提供了通过修改注册表键值强制系统回归稳定S3睡眠状态的详细实战步骤,帮助用户彻底解决睡眠故障,实现可靠的远程访问与挂机任务。

weixin_29210727的博客 605

POJ1151Atlantis【离散化+扫描线+线段树】

Language: Default Atlantis Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19315   Accepted: 7335 Description There are several ancient Greek texts that

走一步再走一步 1217

黑猫带你学UFS协议第23篇:UFS固件升级操作详解(FFU)

摘要:本文介绍了UFS固件更新(FFU)的实现方法与注意事项。根据UFS3.1 JEDEC协议,FFU通过write buffer命令(MODE=0Eh)下载FW固件,随后必须进行power cycle或硬件复位生效。文章详细阐述了FFU操作的10条规则,包括数据分片传输要求、寄存器访问限制等,同时指出协议未明确的厂商实现差异。关键寄存器包括bFFUTimeout、bDeviceFFUStatus和fPermanentlyDisableFwUpdate。

黑猫奥利奥的博客 1万+

【嵌入式DIY实例-ESP32篇】-智能花园助手

本文介绍了一个基于ESP32的智能花园监控系统。系统使用ESP-EYE摄像头开发板,集成了土壤湿度传感器、DHT22温湿度传感器和电磁阀等模块,实现植物生长环境监测与自动灌溉功能。硬件部分详细说明了各传感器的接线方式,软件部分展示了如何通过Firebase实现数据存储和远程监控。系统可实时采集土壤湿度、空气温湿度等数据,并通过摄像头监控植物状态,当检测到环境参数异常时,可自动控制水泵进行灌溉,为植物提供最佳生长环境。

视觉与物联智能 263

poj 1151 Atlantis(线段树+离散化+扫描线)

题目链接:http://poj.org/problem?id=1151 折腾了一下午的题... 具体解释见代码注释。 #include #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; const int maxn=100005; int n,num; double y[ma

To be excellent! 313

Spring Boot 与 Redisson 版本适配深度解析

Spring Boot 与 Redisson 的版本适配是一个动态演进的过程。开发者需要密切关注两者官方的版本更新日志,建立完善的版本验证机制。本文提供的适配方案基于当前最新技术状态(2024年1月),建议在实际生产环境中通过灰度发布策略验证版本兼容性。只有深入理解底层技术原理,才能在分布式系统的星辰大海中稳健航行。延伸阅读Spring Boot 官方迁移指南。

fudaihb的博客 1082

POJ 1151 Atlantis 线段树+离散化+扫描线

Description There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps ...

Yerkeys的博客 317

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

POJ1151 Atlantis(线段树,扫描线,离散化,矩形面积并)

转载自:传送门 题目: Atlantis Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23220 Accepted: 8657 Description There are several ancient Greek texts that contain descriptions of the fabled isl...

菜鸡的博客 343

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

POJ1151 Atlantis 线段树+扫描线(离散化)

题目链接:http://poj.org/problem?id=1151 题目大意:给你一些矩形,其顶点坐标是浮点数,可能相互重叠,问这些矩形覆盖到的面积是多少。 分析:我们将Y轴进行离散化,n个矩形的2n条边界,最多可将Y轴分成2n-1个区域,我们对这些区间进行编号,建立线段树。 const int M=210; struct segment { int l,r;

AC_Gibson的专栏 579

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【POJ】1151 Atlantis(线段树+扫描线+离散化)

题目大意:给若干个矩形,每次给的是矩形对角两个点的坐标,求所有矩形并起来的面积。 线段树扫描线典型题:#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; #define MAX 220 #defin

Jason 733

POJ 1151 Atlantis 线段树+扫描线+离散化+延迟更新

POJ 1151 最先用矩形分割过了,然后才开始研究扫描线。说实话扫描线确实是一个比较巧妙的思路,但网上讲解扫描线的也比较少…… 贴个连接(这片博文引导我理解了扫描线):http://www.cnblogs.com/ka200812/archive/2011/11/13/2247064...

chuanyang6282的博客 193

POJ 1151 & HDU 1542 Atlantis(扫描线模板 线段树 离散化)

POJ 1151 & HDU 1542 Atlantis(扫描线模板 线段树 离散化)

1175

POJ 1151 Atlantis(线段树+离散化+扫描线)

题目很短,大意为有多个矩形求合计面积。(会有重叠,要剔除) 1.线段树,将y轴当作线段,然后在计算的时候从x轴扫描过去 2.数据离散化,而这里区别于前面的题目,只有有区间才可能有长度,所以这里的叶子节点不是l=r,而是l+1=r 3.扫描线,这是我最郁闷的一个地方。刚开始不理解。其实质上是从x轴扫描过去,(把一段段平行于y轴的线段表示成数组 )遇到了看线段树中的标记位。若大于0则为正,表明覆

gg_gogoing的专栏 701

POJ 1151 Atlantis 离散化 + 扫描线 + 线段树

来源:http://poj.org/problem?id=1151 题意:给一些矩形,求这些矩形的面积。 思路:线段树 + 扫描线的题目,因为数据 是double,所以要离散化。 代码: #include #include #include #include using namespace std; const int N = 110; struct line{ double

2881

Atlantis POJ-1151——线段树+扫描线+坐标离散化

题目链接: http://poj.org/problem?id=1151 题意: 求矩形并集的面积。 思路: 想象一条竖线从最左边扫描到最右边,竖线上被矩形覆盖的地方可以确定,即可计算出被覆盖长度。 用线段树维护竖线上被覆盖的长度。 代码: #include<cstdio> #include<cstring> #include<algorith...

weixin_30607659的博客 182

HDU 1542 POJ 1151 Atlantis 线段树+离散化+扫描线 重叠矩阵面积和

There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps describe diff...

深海沧澜的博客 384

POJ 1151 & HDU 1542 Atlantis (扫描线+线段树+离散化)

题意:n个矩形,给出左下、右上坐标,求最后总的面积。 题解:扫描线+线段树+离散化 第一道扫描线。 我们从下至上扫描,离散化横坐标。 扫描之前还需要做一个工作,就是保存好所有矩形的上下边,并且按照它们所处的高度进行排序,另外如果是上边就是-1,相当于总区间上删除一段,也就是出边;下边给就是1,相当于往总区间上插入一段,也就是入边。 我们每次往线段树里加一条入边,也就是在不断更新总的底边长度(增加或减少),直到下一条边是出边,那么我们可以累加面积。如何判断下一条边是出边呢? 由于我们记录了每条边的高度,用e[

gongyuandaye的博客 233

POJ1151-Atlantis【线段树,扫描线,离散化】

正题 题目链接:http://poj.org/problem?id=1151 题目大意 有n个矩形,求所以矩形的覆盖面积。 解题思路 我们用离散化一个坐标,然后每次用线段树维护这个宽度内覆盖高度和,然后定义左上的点是加入,右下的点是弹出。 code #include&lt;cstdio&gt; #include&lt;algorithm&gt; #includ...

QuantAsk 412

poj1151 Atlantis 扫描线+线段树+离散化

Language: Default Atlantis Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16912   Accepted: 6444 Description There are several ancient Greek texts that

AC_kereo的专栏 815
上一篇: poj 2528 Mayor's posters(线段树+区间离散化)
下一篇: poj 3321 Apple Tree(线段树)
accelerator_2016
博客等级 码龄11年 3粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值