题解 P1750 【出栈序列】
看着没有有代码的题解。。。不爽。。。
就AC了。。。
这一题只要模拟+贪心就好
按顺序从左到右遍历一遍基本上就能解决问题,就像一个滑动窗口一样,遇到最小的输出就可以
不过最后记得清空栈
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<queue>
#include<vector>
#include<utility>
using namespace std;
int n,c,flag,m;
int stack[10005],top;
int num[10005];
int main()
{
int i,j;
scanf("%d%d",&n,&c);
for(i=1;i<=n;i++) scanf("%d",&num[i]);
while(m<n)
{
if(flag<n)
{
int minn=0x7fffffff,q;
for(i=flag+1;i<=flag+c-top && i<=n;i++)
{
if(num[i]<minn) minn=num[i],q=i;
}
if(!top)
{
for(i=flag+1;i<q;i++) stack[++top]=num[i];
printf("%d ",num[flag=q]);
m++;
}
else
{
if(stack[top]<num[q])
{
printf("%d ",stack[top--]);
m++;
}
else
{
for(i=flag+1;i<q;i++) stack[++top]=num[i];
printf("%d ",num[flag=q]);
m++;
}
}
}
else
{
while(top) printf("%d ",stack[top--]),m++;
}
}
return 0;
}