zoukankan      html  css  js  c++  java
  • Bad Hair Day(求数组中元素和它后面离它最近元素之间的元素个数)

    题目链接:https://ac.nowcoder.com/acm/contest/984/A

    链接:https://ac.nowcoder.com/acm/contest/984/A
    来源:牛客网

    Bad Hair Day
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows' heads.
    Each cow i has a specified height hi (1 ≤ hi ≤ 1,000,000,000) and is standing in a line of cows all facing east (to the right in our diagrams). Therefore, cow i can see the tops of the heads of cows in front of her (namely cows i+1, i+2, and so on), for as long as these cows are strictly shorter than cow i.
    Consider this example:
    =
    = =
    = - = Cows facing right -->
    = = =
    = - = = =
    = = = = = =

    1 2 3 4 5 6 Cow#1 can see the hairstyle of cows #2, 3, 4
    Cow#2 can see no cow's hairstyle
    Cow#3 can see the hairstyle of cow #4
    Cow#4 can see no cow's hairstyle
    Cow#5 can see the hairstyle of cow 6
    Cow#6 can see no cows at all!
    Let ci denote the number of cows whose hairstyle is visible from cow i; please compute the sum of c1 through cN.For this example, the desired is answer 3 + 0 + 1 + 0 + 1 + 0 = 5.

    输入描述:

    Line 1: The number of cows, N.
    Lines 2..N+1: Line i+1 contains a single integer that is the height of cow i.

    输出描述:

    Line 1: A single integer that is the sum of c1 through cN.
    示例1

    输入

    复制
    6
    10
    3
    7
    4
    12
    2

    输出

    复制
    5

    题目大意:输入N 有N个数 求每个数与它后面的数之间有多少个数 (总和)
    思路:利用栈求解,栈的用途还挺多的,具体看代码:
    #include<iostream>
    #include<algorithm>
    #include<stack>
    #include<cstdio>
    #include<map>
    #include<queue>
    #include<cstring>
    using namespace std;
    typedef long long LL;
    const int maxn=1e9+5;
    stack<int>s;
    int main()
    {
        int N,x;
        LL ans=0;
        cin>>N;
        for(int i=1;i<=N;i++)
        {
            cin>>x;
            while(!s.empty())
            {
                int y=s.top();
                if(y<=x) s.pop();//如果当前的数比栈顶元素大 出栈
                else//否则这个数可以对栈中所有元素都贡献一个
                {
                    ans+=s.size();
                    break;
                }
            }
            s.push(x);
        }
        cout<<ans<<endl;
        return 0;
    }
    当初的梦想实现了吗,事到如今只好放弃吗~
  • 相关阅读:
    Ubuntu 11.04 安装后要做的20件事情
    Net 服务命令行参考之一
    Openerp约束句型
    Ubuntu进入Shell
    postgreSql基础命令及linux下postgreSql命令
    解决中文乱码的问题
    An error occured while handling a json request
    Java Socket编程
    CentOS 7 中 Docker 的安装和卸载
    Spring Boot整合shiro-登录认证和权限管理
  • 原文地址:https://www.cnblogs.com/caijiaming/p/11157932.html
Copyright © 2011-2022 走看看