http://acm.timus.ru/problem.aspx?space=1&num=1915
题意:给你一堆数和一个堆栈,如果n>0,那么入栈,如果等于0,那么复制一下当前的堆栈,如果等于-1,输出栈顶元素。
/*这题最容易出现的就是数组越界,为了不越界,1数组开的足够大;
2在数组越界之前ac
选择方法2来解决问题
因为n的最大值是10e-6,所以说当有10^3个在栈内,再来一个0,进行复制,这时剩下的
操作数只有10^3个,那么我们这时就不用再复制了,因为就算是10^3个-1,我们堆栈内的数也足够输出
*/
#include<stdio.h>
__int64 a[3000000];
int top;
int st[2000000];
int main()
{
int n;
while(~scanf("%d",&n))
{
int i,zero,k,j;
int flag=0;
top=zero=0;
for(k=1;k<=n;k++)
{
__int64 x;
scanf("%I64d",&x);
if(x>0)
{
a[top++]=x;
}
if(x==0)
{
if(flag)
continue;
i=top;
for(j=0;j<i;j++)
{
a[top++]=a[j];
}
if(top>=n-1)//如果发现堆栈总数已经达到了操作数,就不用再复制了
flag=1;
//st[zero++]=top-1;
}
if(x==-1)
{
printf("%I64d\n",a[--top]);
}
}
}
return 0;
}