1273: 夫妻 -stack的运用
zcmu
1273: 夫妻
Time Limit: 1 Sec Memory Limit: 32 MB
[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
HINT
Source
ZSU
ACcode~:
#include <stdio.h> #include <string.h> #include <stack> using namespace std; int a[200005]; int main() {int n,x,y;while(~scanf("%d",&n)&&n){memset(a,0,sizeof(a));for(int i = 1; i <= n; i++){scanf("%d%d",&x,&y);a[x] = a[y] = i;//第i對夫婦兩人編號為i}stack<int>s;s.push(a[1]);//先把第一個人壓入棧for(int i = 2; i <= 2*n; i++){if(!s.empty()&&s.top() == a[i])//下一個人如果和棧頂這個為夫婦,就pop棧頂s.pop();else if(!s.empty()&&s.top()!=a[i]||(s.empty()))//棧頂這個人不與下一個人不為夫婦或棧空了就讓下一個人入棧s.push(a[i]);}if(s.empty())printf("Yes\n");elseprintf("No\n");}return 0; }/*
總結:
1.使用前加頭文件#include 和using namespace std;
2.定義stack對象:
stacks;//int 型叫s的stack對象;
3.基本操作:
1)s.push(x);//將x壓入棧
2)s.pop();//棧頂元素出棧
3)s.top();//訪問棧頂元素
4)s.empty();//判斷棧是否為空,是返回true
5)s.size();//棧中元素個數
*/
總結
以上是生活随笔為你收集整理的1273: 夫妻 -stack的运用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1687: 数组操作(非常规思维)
- 下一篇: 1269: GPA-一题简单英文题~