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;
}
}