第一次测试样例124没有过,错误点在于先入栈再判断,这样无法处理假设栈最大值为5 输入7 6 5 4 3 1 2这样的问题,按照此例子应该是YES但是由于先进栈导致栈满flag为false输出NO
补: 第一个测试样例是因为边输入边判断 如果中途break后 后续无法继续输入
else
{
// cout << x << endl;
s.push(x);
if(s.size() > m)
{
flag = false;
// break; 不可以break!
}
}
AC代码:
#include <iostream>
#include <stack>
#include <map>
#include <cmath>
using namespace std;
const int maxn = 10010;
int n,m,k;
int arra[maxn];
int main()
{
cin >> n >> m >> k;
stack<int> st;
while(k--)
{
bool flag = true;
int current = 1;
stack<int> st;
for(int i = 1; i <= n; i++)
{
cin >> arra[i];
}
for(int i = 1; i <= n; i++)
{
if(arra[i] == current)
{
current++;
while(!st.empty() && st.top() == current)
{
st.pop();
current++;
}
}
else
{
st.push(arra[i]);
if(st.size() > m)
{
flag = false;
break;
}
}
}
if(flag == true && st.empty() == true)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
return 0;
}