火车进站

实验任务

这是一个普通的火车站,有一个供列车车厢调转位置的栈型铁轨:
这里写图片描述
进站的列车编号为 1 2 3 …n,栈型铁轨可容纳 m 台车厢。
车站管理员喜欢是个糊涂虫,经常把列车运行记录弄错。这是十分严重的问题。
现在,给出车站管理员记录的列车车厢的出站编号顺序,你能判断出他是否有记错吗?

数据输入

输入第一行为两个整数 n m(0

数据输出

若车站管理员记录出错,请输出“ERROR”及第一个出现错误的车厢号,用空格隔开。
否则输出“OK”

输入示例

7 2
1 2 4 5 3 6 7
6 3
1 2 5 3 4 6

输出示例

OK
ERROR 3

解题思路

见注释

参考代码

#include <iostream>  
#include <cstdio>  
#include <stack>  
const int maxn = 10010;  
int target[maxn];  
using namespace std;  
int main()  
{  
    int n,m,i;  
    while (~scanf("%d %d",&n,&m)){  
        for (i = 1;i <= n;i++)  
            scanf("%d",&target[i]); //输入车厢出站顺序 
        stack<int> s;  
        int u = 1,v = 1; // u代表进站车厢编号,v代表出站车厢数组的索引值
        bool flag = true;  
        while (v <= n){//出站n个  
            if (u == target[v])  //进站与出站编号相同
                u++,v++;  //都后移一位
            else if (!s.empty() && s.top() == target[v]) //栈非空 且 栈顶元素编号等于出站编号,则栈顶元素出栈,出站车厢后移一位 
                s.pop(),v++;  
            else if (u <= n && s.size() < m)  //进站车厢编号不大于n 且 栈中元素少于m个 
                s.push(u++);  //进站车厢进栈等待
            else{  
                flag = false; //上述都不满足,则ERROR
                break;  
            }  
        }  
        flag?printf("OK\n"):printf("ERROR %d\n",target[v]);  
    }  
    return 0;  
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值