ural 1915 Titan Ruins: Repeating Success and Failure

来源:互联网 发布:在淘宝买东西可靠吗 编辑:程序博客网 时间:2024/06/05 05:29

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;}


0 0
原创粉丝点击