zcmu Problem D: 夫妻

【题目】

Problem D: 夫妻

Time Limit: 1 Sec  Memory Limit: 32 MB
Submit: 344  Solved: 76
[Submit][Status][Web Board]

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

【题解】

题意:n对夫妻站一排,两夫妻的位置在一起就可以牵手离开,问能否全部离开。

思路:stack的简单应用。

【代码】

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

猜你喜欢

转载自blog.csdn.net/qq_41117236/article/details/81117709