例题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

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

正规式与有限自动机例题

答案:D 知识点: 正规式 正规集 举例 ab 字符串ab构成的集合 {ab} a|b 字符串a,b构成的集合 {a,b} a^* 由0或者多个a构成的字符串集合 {空,a,aa,aaa,aaaa····} (a|b)^* 所有字符a和b构成的串的集合 {空,a,b,ab,aab,aba,aaab····} a(a|b)^* 以a为首字符的a,b字符串的集

【转载】ACM感悟

今天看了一篇我们学校前辈的ACM的感悟,觉得写的十分有道理,这里转载,文章还会不断的改进和更新。 原文链接:http://www.cnblogs.com/Chierush/p/3760870.html?ADUIN=1339764596&ADSESSION=1401536826&ADTAG=CLIENT.QQ.5329_.0&ADPUBNO=26349 声明:本文是写给弱校ACM新手的一点

我们依旧在追梦的路上-山东省第六届ACM比赛总结

这场比赛从结果而言达到了预期(金牌),从过程而言和我的预期相差甚远(打的太乱,个人发挥很差),还好关键时刻队友抗住压力,负责后果真的不堪设想。 热身赛 热身赛纯粹测机器的,先把A,B,C草草水过(A题小写x打成大写的也是醉了),我和老高开始各种测机器,long long不出所料是lld的,试了一下除0和数组越界的re问题,发现没有re,只有wa(甚至数组越界还AC了),至于栈深的话也没过多追

算法练习小技巧之有序集合--套路详细解析带例题(leetcode)

前言:         本文详细讲解Python中的有序集合SortedList和C++中的有序集合multiset的用法,配合leetcode的例题来展示实际的用处。(本人水平不够,还无法讲解有序集合的实现方法,只会用)         觉得有帮助或者写的不错可以点个赞,后面也有几道我找出来的题目可以用这个方法快速解决的         (感觉有点水) 目录 有序集合用法讲解:

【JFinal】IDEA+maven上手JFinal之Hello World!

一、New Project 1、在 IDEA 环境下新建 Project 项目 2、选择创建 Maven 项目,并且不使用模板 3、输入 Maven 的 GroupId 和 ArtifactId 4、输入项目名称 二、将当前 Project 改为 POM 工程 将项目的 jfinal-web-demo 作为项目的 parent 工程,用于定义 maven 依赖包的版本信息、

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了