1. 程式人生 > >51Nod1289 大魚吃小魚(stl:stack)

51Nod1289 大魚吃小魚(stl:stack)

這道題首先要讀懂題意,其實題目上表述的很模糊,並沒有說魚的相對位置。實際上魚是有相對位置的,根據讀入資料的先後表示魚的相對位置,先讀入的魚的資料的位置在後讀入魚的資料的左邊。

讀懂題之後,這道題就簡單了,直接模擬過程就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; 
}