码迷,mamicode.com
首页 > 其他好文 > 详细

poj 3250 Bad Hair Day

时间:2014-09-22 02:39:31      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   for   div   sp   

题目链接:http://poj.org/problem?id=3250

思路分析:

                题目要求求每头牛看见的牛的数量之和,即求每头牛被看见的次数和;

      现在要求如何求出每头牛被看见的次数?

      考虑到对于某头特定的牛来说,看见它的牛一定在它的左边,另外其高度应该大于该牛的高度,所以只需要计算在其左边并高度大于它的牛的数目即可;

      考虑构建一个栈,在某头牛入栈时,弹出栈中高度小于它的牛,剩下的牛高度大于它,此时计算栈的长度就可以得到该牛被看见的次数。

 

代码如下:

#include<iostream>
#include<stack>
using namespace std;

int main()
{
    int n;
    int ans = 0;
    unsigned long height;
    stack<unsigned long>S;

    scanf( "%d", &n );
    scanf( "%d", &height );
    S.push( height );
    for ( int i = 1; i < n; i++ )
    {
        scanf( "%d", &height );
        while ( !S.empty() && S.top() <= height )
            S.pop();
        
        ans = ans + S.size();
        S.push( height );
    }

    while ( !S.empty() )
        S.pop();

    printf( "%u\n", ans );
    return 0;
}

算法复杂度: O(N)

poj 3250 Bad Hair Day

标签:style   blog   http   color   io   os   for   div   sp   

原文地址:http://www.cnblogs.com/tallisHe/p/3985298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!