hdu 4252 A Famous City

时间:2022-02-24 20:50:35

题意:
一张相片上的很多建筑相互遮住了,根据高低不同就在相片上把一座高楼的可见部分作为一个矩形,
并用数字描述其高度,若一张相片上的两个建筑群中间有空地,高度则为0;求最少有多少个建筑;

分析:

输入的0不是建筑,则输入的总个数减去0的个数就是最多可能有的建筑数;
再从第一个开始从前往后搜,若发现比它高的则继续搜,若发现比它低的则说明它是一个独立的建筑,
这时可以返回搜其它的;若与它相等,说明这时它们还没有出现比它们低的建筑,则视其为同一个建筑,
则ans减1;

 #include<cstdio>
#include<cstring>
#define maxn 100001
using namespace std;
int n,a[maxn];
int main()
{
int cas=;
while(scanf("%d",&n)!=EOF)
{
int ans=n;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=;i<=n;i++)
{
if(a[i]==)
ans--;
else
{
for(int j=i+;j<=n;j++)
{
if(a[j]<a[i])
break;
if(a[j]==a[i])
{
ans--;
break;
}
}
}
}
printf("Case %d: %d\n",++cas,ans); }
return ;
}