• 3.2station


    题意火车进入,然后要求以最大字典序输出
    解题思路:先用一个数组储存当前位置之后最大的数字是什么,然后把已经进站的最后一节火车和还没进站的车的最大值,哪个更大,如果已经进站的更大,那么就先出站,否则就先一直把那些火车进站直到那个最大的火车,然后输出就好了。

    #include<iostream>
    #include<cstdio>
    #include<stack>
    #include<cstring>
    using namespace std;
    #define sf scanf
    #define scf(x) scanf("%d",&x)
    #define scff(a,b) scanf("%d%d",&a,&b)
    #define pf printf
    #define prf(x) printf("%d
    ",x)
    #define mm(a,b) memset((a),(b),sizeof(a))
    #define rep(i,a,b) for(int i=(a);i<(b);i++)
    #define per(i,a,b) for(int i=a;i>=b;i--)
    const int N=1e5+7;
    int a[N],c[N];
    stack<int>v;
    int main()
    {
    	mm(a,0);
    	int n,x,maxn=0;scf(n);
    	rep(i,1,n+1)
    	{
    		scf(x);
    		c[i]=a[i]=x;
    	}
    	per(i,n-1,1)//记录最大的数是多少 
    		a[i]=max(a[i+1],a[i]);
    	int pos=1;    //pos是已经进入的车辆数
    	pf("%d",a[1]);
    	for(;pos<=n;pos++)
    	{
    		if(c[pos]==a[1])
    		{
    			pos++;
    			break;
    		}else
    		v.push(c[pos]); 
    	}
    	while(1)
    	{
    		if(pos>n&&v.empty()) break;//都走完且栈为空退出
    		if(pos>n)//都走完就只输出
    		{
    			pf(" %d",v.top());
    			v.pop();
    		}
    		else if(v.empty())//栈为空就判断当前这个是不是最大的,是就输出,不是就存入
    		{
    			if(a[pos]==c[pos])
    				pf(" %d",a[pos]);
    			else
    				v.push(c[pos]); 
    			pos++;
    		}else
    		{
    			if(v.top()>a[pos])//如果已经进的更大就输出这辆
    			{
    				pf(" %d",v.top());
    				v.pop();
    			}else//否则
    			{
    				if(a[pos]==c[pos])//如果当前这个就是最大的就输出
    					pf(" %d",a[pos]);
    			
    				else    //否则进站
    					v.push(c[pos]);
    				pos++;
    			}
    		 }
    	}
    	pf("
    ");
    	return 0;
    }
    
  • 相关阅读:
    pch文件
    Info.plist常见的设置
    通知机制
    UITextField
    通过代码自定义cell(cell的高度不一致)
    Cell的重用原理
    UITableViewCell的contentView
    2019备考[嵌入式系统设计师]之“接口技术(上)”
    shell输入输出重定向问题
    [无私分享]最新网盘资源搜索站点
  • 原文地址:https://www.cnblogs.com/wzl19981116/p/10086641.html
Copyright © 2020-2023  润新知