当前位置: 代码迷 >> 综合 >> 1020. 铁路调度
  详细解决方案

1020. 铁路调度

热度:47   发布时间:2023-12-06 11:30:26.0

在这里插入图片描述
在这里插入图片描述
思路:
一开始一直没有什么想法,一直试图从相邻的弹出的数的数据范围上去着手(的确是格局小了
然后度娘了一下,原来这种题目,完全可以借助一个辅栈,把题目所给的弹出顺序倒着存在一个辅栈中,每次入栈都判断一下是否是辅栈的栈顶,如果是的话就弹出。
这道题目在写法上并不困难,主要是思路,但是现在想想判断的工作完全交给计算机去处理,好像是比较合理的,可能因为之前没有接触过,所以导致很长一段时间都没有什么想法。

#include <cstdio>
#include <iostream>
using namespace std;
int n,a[111];
struct STACK
{
    int top,data[1111111];void init(){
    top=0;}int size(){
    return top;}void pop(){
    top--;}void push(const int &x){
    top++;data[top]=x;}
}st1,st2;
int main()
{
    cin>>n;for(int i=1;i<=n;i++){
    int k;char c;cin>>k;for(int i=1;i<=k;i++){
    cin>>c;st1.data[k+1-i]=c-'0';//cout<<"st1.data[k+1-i]="<<st1.data[k+1-i]<<endl;}st1.top=k;//cout<<st1.size()<<endl;//cout<<"st1.data[st1.size()]="<<st1.data[4]<<endl;for(int i=1;i<=k;i++){
    st2.push(i);//cout<<"st2.data[st2.size()]="<<st2.data[st2.size()]<<endl;//cout<<"st1.data[st1.size()]="<<st1.data[st1.size()]<<endl;while(st2.data[st2.size()]==st1.data[st1.size()]){
    if(st2.size()==0) break;//cout<<"!!st2.data[st2.size()]="<<st2.data[st2.size()]<<endl;//cout<<"!!st1.data[st1.size()]="<<st1.data[st1.size()]<<endl;st1.pop();st2.pop();}}if(st2.size()==0) cout<<"yes"<<endl;else cout<<"no"<<endl;st1.init();st2.init();}return 0;
}

更系统化的形式:

#include <cstdio>
#include <iostream>
using namespace std;
int n,a[111];
struct STACK
{
    int cnt,data[1111111];void init(){
    cnt=0;}int top(){
    return data[cnt];}int size(){
    return cnt;}void pop(){
    cnt--;}void push(const int &x){
    cnt++;data[cnt]=x;}
}st1,st2;
int main()
{
    cin>>n;for(int i=1;i<=n;i++){
    int k;char c;cin>>k;for(int i=1;i<=k;i++){
    cin>>c;st1.data[k+1-i]=c-'0';//cout<<"st1.data[k+1-i]="<<st1.data[k+1-i]<<endl;}st1.cnt=k;//cout<<st1.size()<<endl;//cout<<"st1.data[st1.size()]="<<st1.data[4]<<endl;for(int i=1;i<=k;i++){
    st2.push(i);//cout<<"st2.data[st2.size()]="<<st2.data[st2.size()]<<endl;//cout<<"st1.data[st1.size()]="<<st1.data[st1.size()]<<endl;while(st2.top()==st1.top()){
    if(st2.size()==0) break;//cout<<"!!st2.data[st2.size()]="<<st2.data[st2.size()]<<endl;//cout<<"!!st1.data[st1.size()]="<<st1.data[st1.size()]<<endl;st1.pop();st2.pop();}}if(st2.size()==0) cout<<"yes"<<endl;else cout<<"no"<<endl;st1.init();st2.init();}return 0;
}