HDU4252:A Famous City

原创 2013年12月01日 21:17:55
Problem Description
After Mr. B arrived in Warsaw, he was shocked by the skyscrapers and took several photos. But now when he looks at these photos, he finds in surprise that he isn't able to point out even the number of buildings in it. So he decides to work it out as follows:
- divide the photo into n vertical pieces from left to right. The buildings in the photo can be treated as rectangles, the lower edge of which is the horizon. One building may span several consecutive pieces, but each piece can only contain one visible building, or no buildings at all.
- measure the height of each building in that piece.
- write a program to calculate the minimum number of buildings.
Mr. B has finished the first two steps, the last comes to you.
 

Input
Each test case starts with a line containing an integer n (1 <= n <= 100,000). Following this is a line containing n integers - the height of building in each piece respectively. Note that zero height means there are no buildings in this piece at all. All the input numbers will be nonnegative and less than 1,000,000,000.
 

Output
For each test case, display a single line containing the case number and the minimum possible number of buildings in the photo.
 

Sample Input
3 1 2 3 3 1 2 1
 

Sample Output
Case 1: 3 Case 2: 2
Hint
The possible configurations of the samples are illustrated below:
 


 

这道题算是比较难理解的了

题意:
一张相片上的很多建筑相互遮住了,根据高低不同就在相片上把一座高楼的可见部分作为一个矩形,
并用数字描述其高度,若一张相片上的两个建筑群中间有空地,高度则为0;求最少有多少个建筑;
思路:
1 2 1最少为2座,因为2把1挡住了,而3 1 3则为3座,1挡不住3;
如:1 2 3 1 2 3 0 1
输入的0不是建筑,则输入的总个数减去0的个数就是最多可能有的建筑数,设为s;
再从第一个开始从前往后搜,若发现比它高的则继续搜,若发现比它低的则说明它是一个独立的建筑,
这时可以返回搜其它的;若与它相等,说明这时它们还没有出现比它们低的建筑,则视其为同一个建筑,
则s减1;

 

 

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

int a[1000005],x,len;

int main()
{
    int n,i,cas = 1,ans,j;
    while(~scanf("%d",&n))
    {
        ans = 0;
        for(i = 0; i<n; i++)
            scanf("%d",&a[i]);
        if(a[0]==0)
            ans++;
        for(i = 1; i<n; i++)
        {
            if(a[i]==0)
                ans++;
            else
            {
                for(j = i-1; j>=0; j--)
                {
                    if(a[i]>a[j])
                        break;
                    else if(a[i]==a[j])
                    {
                        ans++;
                        break;
                    }
                }
            }
        }
        printf("Case %d: %d\n",cas++,n-ans);
    }

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU - 4252 A Famous City (单调栈)

Description After Mr. B arrived in Warsaw, he was shocked by the skyscrapers and took several photos...
  • cherish0222
  • cherish0222
  • 2017年07月12日 21:17
  • 137

hdu 4252 #想法

A Famous City Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...
  • cscj2010
  • cscj2010
  • 2012年07月16日 22:42
  • 751

HDU4252:A Famous City

Problem Description After Mr. B arrived in Warsaw, he was shocked by the skyscrapers and took sever...
  • aianswer3
  • aianswer3
  • 2017年02月19日 20:46
  • 103

HDU4252 A Famous City

H - 1008 Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta...
  • a197p
  • a197p
  • 2015年04月17日 22:13
  • 476

HDU:4252 A Famous City(单调栈)

题意:给一些从正面看得到的楼的高度,问最少可能有多少楼。 思路:单调栈。用一个栈维护一个单调递增序列。如果栈空或栈顶小于当前元素可将当前元素压栈,如果小于栈顶元素则将栈顶元素弹出并将答案加一,相同则...
  • kkkwjx
  • kkkwjx
  • 2015年04月18日 14:24
  • 370

POJ1363:Rails

Description There is a famous railway station in PopPush City. Country there is incredibly hilly. Th...
  • libin56842
  • libin56842
  • 2013年07月22日 14:59
  • 9421

A Famous City(单调栈)

A Famous City Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To...
  • flqbestboy
  • flqbestboy
  • 2012年11月07日 21:30
  • 305

NYOJ - A Famous Music Composer

A Famous Music Composer 时间限制:1000 ms  |           内存限制:65535 KB 难度:1 描述 Mr. B is a famous mus...
  • SevenMIT
  • SevenMIT
  • 2012年11月27日 21:33
  • 2926

HDU 4252 A Famous City

A Famous City Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...
  • aozil_yang
  • aozil_yang
  • 2016年04月16日 20:55
  • 173

HDU/HDOJ----4252 A Famous City

多校热身赛的一道比较水的题,一般都是用桟做的,我YY的线段树+二分,勉强也能跑过,但是调的时候还是调的比较费事的。 #include #include #include #include ...
  • HEU_xueyan
  • HEU_xueyan
  • 2012年07月24日 14:52
  • 201
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU4252:A Famous City
举报原因:
原因补充:

(最多只允许输入30个字)