算法训练-铁轨

题目描述:
某城市有一个火车站,铁轨铺设如图所示。


有n节车厢从A方向驶入车站,按进站顺序编号1~n。
现让这些火车按照某种特定的顺序进入B方向的铁轨并驶出车站。
为了重组车厢,可以借助中转站C。
C是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出C。
对于每个车厢,一旦从A移入C,就不能再回到A了;一旦从C移入B,就不能回到C了。
换句话说,在任意时刻,只有两种选择:A→C和C→B。
请编程判断判断:按给定的出站顺序,火车能否出站。
样例输入:
5
1 2 3 4 5
5
5 4 1 2 3
6
6 5 4 3 2 1
样例输出:
Yes
No
Yes

 

本题为了训练栈的应用

AC代码:

#include<stdio.h>
int a[2000],b[2000],stack[2000];
int main()
{
    int i,j,n,top,k;
    while(scanf("%d",&n)!=EOF)
    {
       for(i=0;i<n;i++)
       scanf("%d",&a[i]);//输入测试队列
       for(i=0;i<n;i++)
       b[i]=i+1;//队列初始化
       top=0;k=0;j=0;i=0;
       stack[top++]=b[0];//栈顶元素初始化
       while(k!=n)//如果出战元素刚好为输入的车厢个数,就退出
       {
          if(i==n)//只要车厢遍历完,就退出
          break;
          if(stack[top-1]!=a[j])//如果栈顶元素不等于测试元素
          {
             i++;//继续入栈
             stack[top++]=b[i];
          }
          else
          {
              k++;//如果等于出站元素,栈顶元素出栈,并且标记加1
              top--;
              j++;//测试数组向后移动
          }
       }
       if(k==n)//如果成功出战元素刚好为输入的测试车厢个数,说明出站成功
       printf("Yes\n");
       else
       printf("No\n");
    }
    return 0;
}
时间: 2024-11-03 11:12:05

算法训练-铁轨的相关文章

蓝桥杯-算法训练 操作格子

算法训练 操作格子   时间限制:1.0s   内存限制:256.0MB        问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求连续一段格子的最大值. 对于每个2.3操作输出你所求出的结果. 输入格式 第一行2个整数n,m. 接下来一行n个整数表示n个格子的初始权值. 接下来m行,每行3个整数p,x,y,p表示操作类型,p=1时表示修改格子x的权值为y,p=2时表示求区间[x,y]内格子权

蓝桥杯 算法训练 安慰奶牛

 算法训练 安慰奶牛   时间限制:1.0s   内存限制:256.0M 问题描述 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路.道路被用来连接N个牧场,牧场被连续地编号为1到N.每一个牧场都是一个奶牛的家.FJ计划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性.你首先要决定那些道路是需要保留的N-1条道路.第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj != Ej),而且走完它需要Lj的时

蓝桥杯-算法训练51-Torry的困惑(基本型)

今天做这道题最初以为会用到什么数学公式,在思考后发现自己想多了. 思路主要两个: 1. 生成一个质数表,再按要求求值(本文就按此方法): 2.从小取到大,判断是否是质数,如果是就相乘,并构建计数器判断是否达到n个. 算法训练 Torry的困惑(基本型)   时间限制:1.0s   内存限制:512.0MB 问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题

lift and throw-蓝桥杯-算法训练 Lift and Throw 求教各位大牛,谢谢各位

问题描述 蓝桥杯-算法训练 Lift and Throw 求教各位大牛,谢谢各位 问题描述 给定一条标有整点(1, 2, 3, ...)的射线. 定义两个点之间的距离为其下标之差的绝对值. Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点. 每个角色只能进行下面的3种操作, 且每种操作每人不能进行超过一次. 1.移动一定的距离 2.把另一个角色高举过头 3.将举在头上的角色扔出一段距离 每个角色有一个movement range参数

c语言-算法训练 最大的算式 用C语言怎么解决

问题描述 算法训练 最大的算式 用C语言怎么解决 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号.例如: N=5,K=2,5个数字分别为1.2.3.4.5,可以加成: 1*2*(3+4+5)=24 1*(2+3)*(4+5)=45 (1*2+3)*(4+5)=45 -- 输入格式 输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中

蓝桥杯-算法训练2 最大最小公倍数

刚做了,蓝桥杯算法训练的最大最小公倍数一题,感觉考查的是数学了,哈哈. 时间限制:1.0s   内存限制:256.0MB 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你找到的最小公倍数. 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 10^6. 思路如下: 1. n是奇数,那就最大的三个数相乘 2. n是偶数,得分两种情况了, ①如果n不是3的倍数,那就s=n*(n-1)

string-JAVA算法训练 数列给定一个正整数k(3≤k≤15)

问题描述 JAVA算法训练 数列给定一个正整数k(3≤k≤15) ------------------题目------------------------------------------------------- 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,- (该序列实际上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3

c语言-算法训练 未名湖边的烦恼 怎么用C语言解决

问题描述 算法训练 未名湖边的烦恼 怎么用C语言解决 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个.现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面.(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法) 输入格式 两个整数,表示m和n 输出格式 一个整数,表示队伍的排法的方案数. 样例输入 3 2 样例输出

新颖训练方法——用迭代投影算法训练神经网络

首发地址:https://yq.aliyun.com/articles/72738 作者介绍:Jesse Clark 研究相位恢复的物理学家.数据科学家,有着丰富的建设网站与设计手机应用的经验,在创业公司有着丰富的经验,对创业有着极大的热情.  Github: https://github.com/jn2clark Linkedin: http://www.linkedin.com/in/j3ss3cl4rk 相位恢复(PR)关心的是在给定幅度信息以及受到实空间限制下,找到复值函数(通常在傅立叶