hdu 4252 A Famous City
题意:
一张相片上的很多建筑相互遮住了,根据高低不同就在相片上把一座高楼的可见部分作为一个矩形,
并用数字描述其高度,若一张相片上的两个建筑群中间有空地,高度则为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 }