zoukankan      html  css  js  c++  java
  • 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
    ",++cas,ans);
    35 
    36     }
    37     return 0;
    38 }
  • 相关阅读:
    c++ struct 使用
    c++数组、字符串操作
    c++ List、Vector、Stack、Queue使用
    十三、哈希表
    十二、234树
    十一、红黑树
    十、哈夫曼编码
    九、二叉树
    八、高级排序
    七、递归
  • 原文地址:https://www.cnblogs.com/tsw123/p/4437547.html
Copyright © 2011-2022 走看看