• 算法第二次作业skyline


    问题内容

    数据结构与算法实验题 2.4 条形图轮廓问题
    ★实验任务
    在 x 轴上水平放置着 n个条形图。条形图的轮廓是消去这 n 个条形图的隐藏线后得到的图形,如图所示。
    每个条形图由 3元组(Li,Hi,Ri)表示。其中,Li 和 Ri分别为条形图左右竖线的 x 坐标值,Hi 为条形图的高度。例如,上图的 8个条形图表示为:(1,11,5),(2,6,7),(3,13,9),(12,7,16),(14,3,25),(19,18,22),(23,13,29),(24,4,28)。条形图的轮廓可用轮廓向量(V1,V2,…,Vm)表示。当 i 为奇数时,Vi 表示条形图轮廓中一条竖线的 x 坐标值:当i 为偶数时,Vi 表示条形图轮廓中一条横线的高度。
    例如,上图的条形图轮廓向量为(1,11,3,13,9,0,12,7,16,3,19,18,22,3,23,13,29,0)。
    现在,对于给点的 n个条形图,计算其条形图轮廓。
    ★数据输入
    第一行一个正整数 n,表示 n 个条形图(1 <= n <= 4000)。
    接下来 n 行,每行有 3 个整数(Li,Hi,Ri),Li 和 Ri 分别为条形图左右竖线的 x 坐标值,Hi 为条形图的高度(-3000 <= Li,Ri<= 3000, 1 <= Hi <= 1000)。
    ★数据输出
    输出计算出的条形图轮廓向量。
    

    我的代码

    #include<iostream>
    using namespace std;
    int main(){
    	int n,height[6010],l,h,r,j,s;
    	cin>>n;
    	for(j=0;j<6010;j++)
    	height[j]=0;
    	for(int i=0;i<n;i++){
    		cin>>l>>h>>r;
    		l+=3000;
    		r+=3000;
    		s=r;
    		for(int i=l;i<r;i++){
    			if(h>height[i])
    			height[i]=h;
    		}
    	}
    	for(int i=0;i<6010;i++){
    		if(height[i]!=height[i+1])
    		cout<<i-2999<<" "<<height[i+1]<<" ";
    	}
    	return 0;
    } 
    
  • 相关阅读:
    Nova创建虚拟机的底层代码分析
    Chapter 1 Securing Your Server and Network(12):保护链接server
    c语言实现hashtable,相似C++的map和iOS的NSDictionary
    Android_Training
    Bean Validation 技术规范特性概述
    linux下串口调试工具/串口终端推荐: picocom
    Android:主题(Theme)
    oracle database 12c R1 安装文档
    python版本wifi共享工具
    iOS 6编程Cookbook(影印版)
  • 原文地址:https://www.cnblogs.com/XINJIUXJ/p/13663339.html
Copyright © 2020-2023  润新知