安装了lnmp怎么做网站,北京三里屯,做网站视频网站,网站怎么推广出去题目#xff1a; 某城市有一个火车站#xff0c;铁轨铺设如图所示#xff0c;有n节车厢从A方向驶入车站#xff0c;按进站顺序编号为1至n。你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢#xff0c;你可以借助中转站C。这是一个…题目 某城市有一个火车站铁轨铺设如图所示有n节车厢从A方向驶入车站按进站顺序编号为1至n。你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢你可以借助中转站C。这是一个可以停放任意多节车厢的车站但由于末端封顶驶入C的车厢必须按照相反的顺序驶出车站。例如出站顺序54123是不可能的而54321是可能的。对于每节车厢一旦从A移入C就不能再回到A了一旦从C移入B就不能回到C了。换句话说在任意时刻只有两种选择A-C和C-B。
现在给你一种1到n的排列请你判断是否是题目描述的一种可能如果是请输出yes否则输出no 输入 两行第一行有一个正整数n表示有n节车厢第二行有n个正整数即1到n的一种排列两两之间有一个空格分隔。 输出 yes或者no 输入示例 5 5 4 1 2 3 输出示例 no
分析与解答
原数组元素1到n 目标数组元素输入 栈从栈顶到底n到1 推论出栈顺序要么是进一个出一个要么是栈顶出栈进多个出一个 1.当原数组元素等于目标数组元素时先进栈再出栈即可 2.否则判断栈顶元素是否等于目标数组若相等栈顶元素出栈 3.若不相等在数组不为空的情况下将原数组元素入栈。 4.若都不满足说明不符合条件flag 0break。
#includecstdio
#includestack
using namespace std;
const int MAX100010;int n,target[MAX];int main(){while(scanf(%d,n)1){stackint s;int a1,b1;for(int i1;in;i)scanf(%d,target[i]);int ok1;while(bn){if(atarget[b]){a;b;}else if(!s.empty()s.top()target[b]){s.pop(); b;}else if(an) s.push(a);else {ok0;break;}}printf(%s\n,ok?Yes:No);}return 0;
}
8.2号更新 模拟了一下过程