POJ 3250 Bad Hair Day (栈的简单应用)
2016-08-28 09:47
295 查看
http://poj.org/problem?id=3250
题意:一排全都向右看齐的牛,第 i 头牛可以看到在它右边且比它低的不被比它高的牛所遮挡的牛。问1~n头能看见的和。
刚开始我用最基础的方法写,但是超时了,当然poj也不会出这样简单的水题.太天真了。
超时代码。
后来发现可以用栈的数组模拟来写。
思路:只要每次把比输入的一头牛低的或者等于它的牛去掉,那么栈中剩余的牛便是能看见这头牛的数量。
题意:一排全都向右看齐的牛,第 i 头牛可以看到在它右边且比它低的不被比它高的牛所遮挡的牛。问1~n头能看见的和。
刚开始我用最基础的方法写,但是超时了,当然poj也不会出这样简单的水题.太天真了。
超时代码。
#include<cstdio> __int64 a[80005],ans; int main() { int n; scanf("%d",&n); for(int i = 0;i < n; i++) scanf("%I64d",&a[i]); ans = 0; for(int i = 0;i < n; i++){ for(int j = i + 1;j < n; j++){ if(a[i] > a[j]) ans++; else break; } } printf("%I64d\n",ans); return 0; }
后来发现可以用栈的数组模拟来写。
思路:只要每次把比输入的一头牛低的或者等于它的牛去掉,那么栈中剩余的牛便是能看见这头牛的数量。
#include<cstdio> __int64 Stack[80005],ans,top; int main() { // freopen("in.txt","r",stdin); int n; scanf("%d",&n); ans = 0; top = 0; for(int i = 0;i < n; i++){ __int64 num; scanf("%I64d",&num); while(top > 0 && Stack[top-1] <= num) top--; ans += top; Stack[top++] = num; } printf("%I64d\n",ans); return 0; }
相关文章推荐
- POJ3250——Bad Hair Day(栈的应用)
- poj 3250 Bad Hair Day 栈的简单运用
- POJ 3250 Bad Hair Day
- poj 3250 bad hair day
- POJ 3250 Bad Hair Day(单调队列)
- poj 3250 Bad Hair Day
- POJ 3250 Bad Hair Day(单调栈)
- POJ 3250 Bad Hair Day
- Poj 3250 Bad Hair Day + Poj 2796 Feel Good (单调栈)
- POJ 3250 Bad Hair Day --单调栈(单调队列?)
- POJ-3250 Bad Hair Day 单调栈
- POJ 3250 Bad Hair Day
- POJ 3250 Bad Hair Day(单调栈)
- POJ 3250 Bad Hair Day(DP)
- poj 3250 Bad Hair Day (单调栈)
- poj 3250 Bad Hair Day
- poj 3250 Bad Hair Day
- poj 3250:Bad Hair Day---单调栈
- POJ-3250-Bad Hair Day
- POJ 3250 Bad Hair Day --单调栈(单调队列?)