当前位置: 代码迷 >> 综合 >> zcmu--D/1237 夫妻
  详细解决方案

zcmu--D/1237 夫妻

热度:90   发布时间:2023-12-26 10:28:18.0

Problem D: 夫妻

Time Limit: 1 Sec  Memory Limit: 32 MB

Submit: 365  Solved: 85

[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

 

  • 一直都不是很敢接触栈这些知识点,总觉得很可怕,,不过这这道题其实还好啦,大致看了一些相关知识,发现这些函数可以直接调用,而不是像之前我们学的那样要自己写,那这道题就方便很多了

#include<bits/stdc++.h>
using namespace std;
const int maxn=200020;
int a[maxn];
stack<int> pp;
int main()
{int n;while(scanf("%d",&n)){if(!n)break;int x,y;memset(a,0,sizeof(a));for(int i=0;i<n;i++){scanf("%d%d",&x,&y);a[x]=i;a[y]=i;}pp.push(a[1]);for(int i=2;i<=n*2;i++){if(pp.empty())pp.push(a[i]);else{if(pp.top()==a[i])pp.pop();else pp.push(a[i]);}}if(!pp.empty())cout<<"No\n";else cout<<"Yes\n";}return 0;
}