51Nod1289 大魚吃小魚(stl:stack)
阿新 • • 發佈:2018-12-02
這道題首先要讀懂題意,其實題目上表述的很模糊,並沒有說魚的相對位置。實際上魚是有相對位置的,根據讀入資料的先後表示魚的相對位置,先讀入的魚的資料的位置在後讀入魚的資料的左邊。
讀懂題之後,這道題就簡單了,直接模擬過程就ok了,可以用堆疊來維護資料。如果魚一個向右,一個向左就要判斷是否大魚吃小魚的情況,判斷是否進棧的問題,自己想想很簡單的。
ac程式碼:
#include<iostream> #include<stack> #include<algorithm> using namespace std; struct fish { int big,d; }a[100000]; int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i].big>>a[i].d; stack<fish> s; s.push(a[0]); for(int i=1;i<n;i++) { while(!s.empty()&&s.top().d==1&&a[i].d==0&&a[i].big>s.top().big) s.pop(); if(!s.empty()&&s.top().d==1&&a[i].d==0&&a[i].big<s.top().big) continue; else s.push(a[i]); } cout<<s.size()<<endl; return 0; }