Sicily 1021. Couples

For study!

Posted by Winray on March 4, 2016
  • 思路:
    • 想清楚了这道题其实很简单。利用夫妻出现的位置作为下标,并设为同一值,第一对夫妻值为1,第二对为2,以此类推,存储完毕即可进入下一步。
    • 利用栈这个数据结构:遍历这个数组,当栈不为空且栈顶元素等于数组出现的元素时,pop掉栈顶元素,其余情况则入栈。循环完毕,若栈为空则为Yes,否则为No。
  • 具体代码如下:
#include <iostream>
#include <stack>
using namespace std;

int main() {
    int num;
    while (cin >> num && num) {
        int *store = new int[num*2+1];
        for (int i = 1; i <= num; i++) {
            int a, b;
            cin >> a >> b;
            store[a] = store[b] = i;
        }
        stack<int> st;
        for (int i = 1; i <= num*2; i++) {
            if (!st.empty() && st.top() == store[i]) {
                st.pop();
            }
            else {
                st.push(store[i]);
            }
        }
        st.empty() ? cout << "Yes\n" : cout << "No\n";
    }
    
    return 0;
}