首页 > 技术文章 > hdu 4252 A Famous City

tsw123 2015-04-18 15:58 原文

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

分析:

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

 1 #include<cstdio>
 2 #include<cstring>
 3 #define maxn 100001
 4 using namespace std;
 5 int n,a[maxn];
 6 int main()
 7 {
 8     int cas=0;
 9     while(scanf("%d",&n)!=EOF)
10     {
11         int ans=n;
12         for(int i=1;i<=n;i++)
13         {
14             scanf("%d",&a[i]);
15         }
16         for(int i=1;i<=n;i++)
17         {
18             if(a[i]==0)
19                 ans--;
20             else
21             {
22                 for(int j=i+1;j<=n;j++)
23                 {
24                     if(a[j]<a[i])
25                         break;
26                     if(a[j]==a[i])
27                     {
28                         ans--;
29                         break;
30                     }
31                 }
32             }
33         }
34         printf("Case %d: %d\n",++cas,ans);
35 
36     }
37     return 0;
38 }

 

推荐阅读