例题5-12 城市正视图(Urban Elevations,ACM/ICPC World Finals 1992,UVa221)

本文主要是介绍例题5-12 城市正视图(Urban Elevations,ACM/ICPC World Finals 1992,UVa221),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题链接:https://vjudge.net/problem/UVA-221
分类:<algorithm>
备注:离散化
前言:我也不太清楚刘老师为什么说这题是离散化,我想可能是用到集合的东西吧,区间完全包含于建筑的区间或者交集为空,这都是离散的知识。
但是把无限变为有限是很有用的一种思想!
本题我确实借鉴了VJ中Praying的评论中的代码,所以会很像!

代码如下:

#include<set>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 100 + 5;
int n, kase;
struct CBuild {double x, y, xw, yw, h;int xb;bool operator < (const CBuild& t) const {if (x != t.x)return x < t.x;return y < t.y;}
}b[maxn];
bool vis(int k) {double l = b[k].x, r = b[k].x + b[k].xw;set<CBuild>tmp;for (int i = 0; i < n; i++) {//找到所有遮挡建筑if (b[i].x >= r || b[i].x + b[i].xw <= l)continue;if (b[i].y >= b[k].y || b[i].h < b[k].h)continue;tmp.insert(b[i]);}if (tmp.empty())return true;set<CBuild>::iterator it = tmp.begin();if (l < (*it).x)return true;//最左边漏出double r2 = (*it).x + (*it).xw;it++;for (; it != tmp.end(); it++) {if ((*it).x > r2)return true;//找到中间的空,中间漏出r2 = max(r2, (*it).x + (*it).xw);//从最左边到r2处是目前找到的最长连续段}if (r > r2)return true;//最右边漏出return false;
}
int main(void) {while (~scanf("%d", &n) && n) {if (kase)printf("\n");set<CBuild>ans;for (int i = 0; i < n; i++) {scanf("%lf%lf%lf%lf%lf", &b[i].x, &b[i].y, &b[i].xw, &b[i].yw, &b[i].h);b[i].xb = i + 1;}sort(b, b + n);for (int i = 0; i < n; i++) if (vis(i))ans.insert(b[i]);printf("For map #%d, the visible buildings are numbered as follows:\n", ++kase);for (set<CBuild>::iterator it2 = ans.begin(); it2 != ans.end(); ++it2) {if (it2 != ans.begin())printf(" ");printf("%d", (*it2).xb);}printf("\n");}return 0;
}

这篇关于例题5-12 城市正视图(Urban Elevations,ACM/ICPC World Finals 1992,UVa221)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/899033

相关文章

中国341城市生态系统服务价值数据集(2000-2020年)

生态系统服务反映了人类直接或者间接从自然生态系统中获得的各种惠益,对支撑和维持人类生存和福祉起着重要基础作用。目前针对全国城市尺度的生态系统服务价值的长期评估还相对较少。我们在Xie等(2017)的静态生态系统服务当量因子表基础上,选取净初级生产力,降水量,生物迁移阻力,土壤侵蚀度和道路密度五个变量,对生态系统供给服务、调节服务、支持服务和文化服务共4大类和11小类的当量因子进行了时空调整,计算了

【数据结构与算法 经典例题】使用队列实现栈(图文详解)

💓 博客主页:倔强的石头的CSDN主页               📝Gitee主页:倔强的石头的gitee主页    ⏩ 文章专栏:《数据结构与算法 经典例题》C语言                                   期待您的关注 ​​ 目录  一、问题描述 二、前置知识 三、解题思路 四、C语言实现代码 🍃队列实现代码:

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法(GOOSE Algorithm,GOOSE)从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOOSE algorithm: a powerful optimization tool for real-world engineering

高考志愿填报选专业,学校的城市和学习环境分析

高考分数出炉之后,如何填报志愿选专业,根据以往的数据统计,有相当部分的同学,错失了自己喜欢的专业,而不得不接受调剂。有的同学被调剂到冷门专业,有的同学则是被综合实力相对较差的学校录取,所以高考志愿填报是一件需要格外慎重的事,必须打起十二分精神,也需要懂得听取多方意见,权衡利弊的做选择。 那对于高考生而言,在高考志愿填报中,如何对学校地理位置与学校环境进行考量呢? 高中生(填报志愿,选专业),可

AJAX:如何编写一个关于AJAX的Hello World?(ajax发送异步请求(四步操作))

用到的一个Servlet类: package cn.edu.web.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;impor

oracle学习之第一个存储过程:打印Hello World

数据库对象:表、视图、索引、序列、同义词、存储过程、存储函数 存储过程:指的是存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值(存储函数可以,但是存储过程不行) --第一个存储过程:打印Hello World/*调用存储过程2种方式:1、exec sayhellow

在Mac OS上使用Visual Studio Code创建C++ Qt的Hello World应用

引言 Qt是一个跨平台的应用程序和用户界面框架,而Visual Studio Code是一个功能强大的编辑器,两者结合可以极大地提升开发效率。本文将指导你在Mac OS上使用Visual Studio Code创建一个简单的Qt 'Hello World'窗口应用。 环境准备 确保你的MacBook OS运行最新的操作系统。安装Homebrew,Mac OS的包管理器。通过Homebrew安装

【会议征稿,ACM出版】2024年图像处理、智能控制与计算机工程国际学术会议(IPICE 2024,8月9-11)

2024年图像处理、智能控制与计算机工程国际学术会议(IPICE 2024)将于2024年8月9-11日在中国福州举行。本届会议由阳光学院、福建省空间信息感知与智能处理重点实验室、空间数据挖掘与应用福建省高校工程研究中心联合主办。 会议主要围绕图像处理、智能控制与计算机工程等研究领域展开,旨在为从事计算机等相关研究的专家学者提供一个交流科研成果和前沿技术的平台,了解学术发展趋势,拓宽研究思路

二级联动菜单--常见的城市二级联动

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE> 二级联动菜单 </TITLE><script language="javascript">var jiangxi=[["1","南昌"],["2","上饶"],["3","赣州"]];var zhejiang=[["1","

SpringBoot (一) :入门篇 Hello World

什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 SpringBoot有什么