#includestdioh #includestdlibh int main int MNK; scanfd d d&M&N&K; int ij; int aKN; int t = 0; int flag = 0; fori = 0;i K;i ++ forj = 0;j N;j ++ scanfd&aij; 输入序列 fori = 0;
本题是一道模拟题,需要按照题目要求模拟题目中的操作。
首先,我们需要用一个二维数组来保存每组操作的序列。每组操作的序列长度为N,总共有K组操作。
其次,我们需要判断每组操作是否合法。对于每组操作,有两种不合法情况:
- 栈满溢出:如果当前栈内元素个数大于M+j,则说明栈已经溢出了,即不合法;
- 不满足栈先进后出的原则:如果当前栈内元素不满足栈先进后出的原则,则说明不合法。
对于第二种不合法情况,我们需要依次判断每个元素是否满足栈先进后出的原则。如果当前元素小于栈顶元素且同时小于其后一个元素,则说明不满足栈先进后出的原则,即不合法。
如果一组操作不合法,则输出NO;否则,输出YES。
最后,我们需要清空flag变量,以便下一组操作的判断。
完整代码如下:
原文地址: https://www.cveoy.top/t/topic/bCXv 著作权归作者所有。请勿转载和采集!