先是理解了下题意,对于松枝结束的情况,进行分析,一开始我以为要专门写一个结束的判断,后来发现不太合适,把结束的判断分布在各行代码里吧还是。
什么题呀!以后见到直接跳,真的人麻了。
尝试写了很久,三个测试点超时。跑 了 ,下 辈 子 再 来 做 吧。
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int n, m, k;
vector<int> v;
stack<int> s;
queue<int>q;
void ccout()
{
for (int i = 0;i < v.size();i++)
{
cout <<v[i] << " \n"[i == v.size() - 1];
}
v.clear();
}
int main()
{
cin >> n >> m >> k;
while (n--) {
int x;
cin >> x;
q.push(x);
}
while (s.size() || q.size())
{
if (s.size())
{
v.push_back(s.top());
s.pop();
}
else
{
if (q.size())
{
v.push_back(q.front());
q.pop();
}
}
while (s.size() && s.top() < v.back())
{
v.push_back(s.top());
s.pop();
if (v.size() == k)
{
ccout();
break;
}
}
while (1)
{
if (q.size())
{
if (q.front() <= v.back())
{
v.push_back(q.front());
q.pop();
if (v.size() == k)
{
ccout();
break;
}
}
else
{
s.push(q.front());
q.pop();
if (s.size() == m)
{
ccout();
break;
}
}
}
if (!s.size() && !q.size())
{
ccout();
break;
}
}
}
system("pause");
}