zoukankan      html  css  js  c++  java
  • NOIP模拟题——kun(栈)


    【问题描述】 栈是一种强大的数据结构,它特殊功能对组进行排序。例如借 栈是一种强大的数据结构,它特殊功能对组进行排序。例如借 栈是一种强大的数据结构,它特殊功能对组进行排序。例如借 栈是一种强大的数据结构,它特殊功能对组进行排序。例如借 助一个栈,依次将数组 1,3,2 按顺序入栈或出,可对其从大到小排: 1入栈; 3入栈; 3出栈; 2入栈; 2出栈; 1出栈。 在上面这个例子中,出栈序列是 3,2,1 ,因此实现了对数组的排序。 遗憾的是,有些时候仅借助一个栈不能实现对数组完全排序。例如 遗憾的是,有些时候仅借助一个栈不能实现对数组完全排序。例如 遗憾的是,有些时候仅借助一个栈不能实现对数组完全排序。例如 遗憾的是,有些时候仅借助一个栈不能实现对数组完全排序。例如 遗憾的是,有些时候仅借助一个栈不能实现对数组完全排序。例如 给定数组 2,1,3 ,借助一个栈能获得的字典序最大出列是 3,1,2 : 2入栈; 1入栈 ;3入栈; 3出栈; 1出栈; 2出栈。 请你借助一个栈,对给定的数组按照出顺序进行从大到小排。当无 请你借助一个栈,对给定的数组按照出顺序进行从大到小排。当无 请你借助一个栈,对给定的数组按照出顺序进行从大到小排。当无 法完全排序时,请输出字典最大的栈列。
    【输入格式】
    输入共 2行。
    第一行包含个整数n,表示入栈序列长度。
    第二行包含n个整数,表示入栈序列。输据保证给定的是 1到 n的 全排列,即不会出现重复数字。
    【输出格式】
    仅一行,共n个整数,表示你计算出的栈序列。
    【样例输入】
    3
    2 1 3
    【样例输出】
    3 1 2
    【数据规模与约定】
    对于 30%的数据 ,1≤n≤103。
    对于 60%的数据 ,1≤n≤105。
    对于 100%的数据 ,1≤n≤106。

    由于字典序最大,所以第一个出栈的一定是n这个数,即n之前的直接全部push

    那么接下来一定是想要找n-1这个数。如果这个数没有进栈,那么一定继续push到它

    如果这个数进栈,如1,4,5,3,2这个序列,4进栈了,那么这个时候就贪心比较栈顶和后面要进栈的最大数比较,最大的输出。

    后面的最大数,就直接while判断是否进栈即可。代码用的是手写队列:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cmath>
     4 using namespace std;
     5 const int maxn=1e6+7;
     6 int a[maxn];
     7 int vis[maxn];
     8 int n;
     9 int q[maxn],temp=0;
    10 int main()
    11 {
    12     freopen("kun.in","r",stdin);
    13     freopen("kun.out","w",stdout);
    14     scanf("%d",&n);
    15     for(int i=1;i<=n;i++)
    16     scanf("%d",&a[i]);
    17     int k=n;int temp2=1;
    18     while(k)
    19     {
    20         while(vis[k])k--;
    21         if(k==0)
    22         {
    23             for(int i=temp;i>=1;i--)
    24             printf("%d ",q[i]);
    25             return 0;
    26         }
    27         while(q[temp]>k)
    28         {
    29             printf("%d ",q[temp]);
    30             temp--;
    31         }
    32         while(a[temp2]!=k)
    33         {
    34             q[++temp]=a[temp2];
    35             vis[a[temp2]]=true;
    36             temp2++;
    37         }
    38         printf("%d ",a[temp2]);
    39         temp2++;k--;
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    python 安装第三方插件库报错的解决方案
    vue.js helloword
    node.js HelloWord
    十一 —— 迭代器、生成器、装饰器
    十、函数——匿名函数、推导式
    九、函数 —— 参数
    八、数据类型——bytes类型+set类型
    七、数据类型 —— 字典
    六、数据类型 —— 字符串
    五、数据类型 —— 元组
  • 原文地址:https://www.cnblogs.com/937337156Zhang/p/6020644.html
Copyright © 2011-2022 走看看