Sicily: 1021.Couples

Sicily: 1021.Couples

Sicily題目的特點就是說起來雲裏霧裏的,不容易看懂,其實題目的意思是,給出各個couple的位置,他們站成一個環。問是否能夠逐個把相鄰的couple移除,如果能全部移除就輸出yes,否則輸出no。
這道題考的是棧。可以用其他結構模擬棧,不過STL裏本身就直接帶有棧了,所以很容易就能寫出來了。
把每對couple一個唯一標記,用來判斷是否爲同一對couple就可以。同時可以看到,是否爲環不影響結果。即如果棧的首尾是一對couple,那麼如果是yes,那麼中間必有一對相鄰couple。如果是no,你移除了這個也還是找不到一堆相鄰couple。

代碼

#include <iostream>
#include<stack>
using  namespace std;
int main() {
    int a[200001], b[200000], N, h, w;
    cin >> N;
    while ( N != 0) {
        int i;
        for ( i = 0; i < N; i++ ) {
            cin >> h >> w;
            a[h]=a[w]=i;
        }
        stack<int> s;
        for (int i=1;i<=2*N;i++) {
            if (!s.empty()&&s.top()==a[i])
                s.pop();
            else
                s.push(a[i]);
        }
        if(s.empty())
            cout << "Yes\n";
        else
            cout << "No\n";
        cin >> N;
    }
}
發佈了27 篇原創文章 · 獲贊 0 · 訪問量 7949
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章