Sicily: 1021.Couples

本文解析了Sicily:1021 Couples问题,介绍了一个使用栈来解决环形夫妻对移除问题的方法。通过将夫妻对进行唯一标记,并利用栈的数据结构特性,可以有效地判断是否能够依次移除所有夫妻对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值