ACM_堆箱子咯(栈)

堆箱子问题与栈操作

堆箱子咯

Time Limit: 2000/1000ms (Java/Others)
Problem Description:
双十一大家都在买买买,可忙坏了快递小哥了。zl和皮卡鸡在大伙在剁手的时候,偷偷去快递公司那当兼职赚钱了。zl将箱子一个个叠起来,皮卡鸡将那堆箱子搬到别的地方去,但由于箱子太重,他每次只能拿最上面的一个。zl一边叠箱子,皮卡鸡就一边把目前最上面的箱子搬走,但由于动作快慢不一,有时候zl叠了几个箱子皮卡鸡才搬走一个,有时候皮卡鸡搬走几个箱子,zl才叠上去一个……那么问题来了,根据zl叠箱子的顺序,皮卡鸡搬箱子的顺序可不可能实现?(每个箱子都以一个字符编号,每个字符各不相同)
Input:
输入包含多组数据。
每组数据第一行输入一个整数n(3<n<100),表示箱子的个数,第二行输入一串字符s,表示zl叠箱子的顺序,第三行输入一串字符c,表示皮卡鸡搬箱子的顺序
Output:
如果可以实现,输出“yes”,否则输出“no”,每个输出占一行,不包括双引号。
Sample Input:
5
12345
54321
5
12345
14235
Sample Output:
yes
no
解题思路:判断出栈序列是否为入栈序列的一种,详细题解看这:ACM_栈的压入、弹出序列
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 bool IsPopOrder(string Push,string Pop) {
 4     if(Push.size()==0)return false;
 5     vector<char> vec;
 6     for(size_t i=0,j=0;i<Push.size();++i){
 7         vec.push_back(Push[i]);
 8         while(j<Pop.size()&&Pop[j]==vec.back()){vec.pop_back();j++;}
 9     }
10     return vec.empty();
11 }
12 int main(){
13     string pushlist,poplist;int t;
14     while(cin>>t){getchar();
15         cin>>pushlist>>poplist;
16         if(IsPopOrder(pushlist,poplist))cout<<"yes"<<endl;
17         else cout<<"no"<<endl;
18     }
19     return 0;
20 }

 

转载于:https://www.cnblogs.com/acgoto/p/9240879.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值