搞这个题差不多是从比赛开始到结束。
从自信慢慢的看题一直到wrong到死。
这个题目可以说成是思路题,以为我们只要明白一点,这道题就成了纯暴力的水题,
那就是当操作数不足栈中数字数目的时候,我们就没有必要复制了。
注意数组要开足,如果是一路复制的话,2^20就可以到10^6次方级了,在cur<n的情况下,cur的范围是有可能超10^6的,所以,我们至少要开到2*10^6大小。
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#include <algorithm> #define M 1000005 using namespace std; int st[2*M]; int main ()
{
int n, x, cur;
while(~scanf("%d",&n))
{
cur = 0;
while(n--)
{
scanf("%d",&x);
if(x==0)
{
if(cur<n)
{
for(int i = 0; i < cur; ++i)
st[cur+i] = st[i];
cur += cur;
}
}
else if(x==-1)
{
cur-=1;
printf("%d\n",st[cur]);
}
else
{
st[cur] = x;
++cur;
}
}
}
return 0;
}