ZCMU-1273-夫妻

1273: 夫妻

Time Limit: 1 Sec   Memory Limit: 32 MB
Submit: 216   Solved: 27
[ Submit][ Status][ Web Board]

Description

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

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

Input

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

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

【解析】
这道题一开始本来打算有vector做的因为我想到相邻两个元素如果是夫妻直接做删除操作..不过接着一想这样肯定不好
做...之后呢看到了别人的想法就是用stack来做只要做到在压入栈的同时然后把栈顶元素和那个比较就可以了。还是自
己知识太少..这几天还是有必要多看会书了..题目等着有了知识之后再做吧..遇到瓶颈了..所以在这里提醒下大家,大
家如果感觉自己很多题目都不会了,虽然网上搜资料啊,看题解的确能学会很多,但更重要的是一边看书,一边敲,因
为书上是把知识点已经给你罗列好了的。
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
int a[200002];
stack<int>b;
int main()
{
   int n,i,p,q;
   while(~scanf("%d",&n))
   {
       if(n==0)
        break;
       for(i=1;i<=n;i++)
       {
           scanf("%d%d",&p,&q);
           a[p]=i;
           a[q]=-i;//表示如果两者加起来是0的话就是匹配的
       }
       b.push(a[1]);//先读入第一个数
       for(i=2;i<=2*n;i++)
       {
           if(b.empty()!=0)//如果栈b已经是空的了那就继续填入
           {
           b.push(a[i]);
           }
           else//不是空的,我们就判断栈顶元素和这个时候输入的数匹不匹配
           {
               if(b.top()+a[i]==0)
                b.pop();//弹出栈顶元素
               else
                b.push(a[i]);
           }
       }
       if(b.empty()!=0)//如果最后栈是空的那就全部匹配成功
        printf("Yes\n");
       else
        printf("No\n");
   }
   return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值