1273-夫妻 ZCMU

Description

有n对夫妻围成一个圈站,他们每个人被连续的编号为1至2n。丈夫和妻子不一定站在一起。现在,对于一对夫妻,如果他们两人中间没有隔任何其他人(站在一起),那么,他们将牵手离开。直到所有人都离开或者留下的人不能成功牵手,游戏结束。

现在请问:是否所有的夫妻都能成功牵手走出这个圆圈呢?

Input

输入包含多组测试数据。每组测试数据中,第一行为一个整数n(1<=n<=100000),表示有n对夫妻。之后的n行中,每行包含两个整数a和b,表示a与b是一对夫妻,他们初始时站的位置为a和b。

n=0表示程序终止输入。

Output

如果所有的夫妻都能成功牵手离开,输出“Yes”,否则,输出“No”。

Sample Input

4

1 4

2 3

5 6

7 8

 

2

1 3

2 4

 

0

Sample Output

Yes

No

思路:运用栈后进先出的性质

代码:

#include<bits/stdc++.h> 
using namespace std; 
int main() 
{ 
    int n,c[200010],a,b,i; 
    while(~scanf("%d",&n)) 
    { 
        if(n==0) 
          break; 
        memset(c,0,sizeof(c)); 
        for(i=1;i<=n;i++) 
        { 
            scanf("%d%d",&a,&b); 
            c[a]=c[b]=i;  //将第i对夫妻所处的位置分别存入数组c[a],c[b]并标记为i
        } 
        stack<int> stk; 
        while(!stk.empty()) 
            stk.pop(); 
        for(i=1;i<=2*n;i++) 
        { 
            if(!stk.empty()&&stk.top()==c[i]) 
                stk.pop(); 
            else
                stk.push(c[i]); 
        } 
        if(stk.empty()) 
            printf("Yes\n"); 
        else
            printf("No\n"); 
    } 
    return 0; 
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值