• 题解 CF767A 【Snacktower】


    这题竟然没有题解,小蒟蒻就来捡个漏吧 (ldotsldots)

    其实这题就是照题意模拟就行了。我的思路就是:读入完之后,将这 (n) 个数从头到尾进行一次扫描,用一个布尔型的数组记录 (1)(n) 这些尺寸是否出现过。

    在每个循环的开始,将当前天的零食的尺寸标记为出现过。

    然后再进入一个循环,从 (n) 循环到 (1),也就是零食塔的从下往上的尺寸。如果 (i) 这个尺寸已经出现,就输出,并把 (i) 再标记为未出现,防止下次循环重复输出;否则,就立刻跳出循环。(具体看代码注释)

    原始代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 100005
    #define rg register
    int n,a[MAXN];
    bool book[MAXN];
    int main()
    {
        cin>>n;
        for(rg int i=1;i<=n;++i)
        	cin>>a[i];            //输入部分。 
        for(rg int i=1;i<=n;++i)
        {
        	book[a[i]]=1;         //标记当前的尺寸出现过。 
        	for(rg int j=n;j>=1;j--)
        	{
        		if(book[j]==1)     //如果这个尺寸出现过,就输出。 
        		{
        			cout<<j<<" ";  
        			book[j]=0;      //重新标记为未出现。 
        		}
        		else
        			break;     //否则立即跳出。 
        	}
        	cout<<endl;    //不要忘了换行。 
    	}
        return 0;
    }
    

    其实还可以优化,用一个变量记录目前未输出的最大的尺寸,第二个循环就可以从这个变量开始。

    优化过代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 100005
    #define rg register
    int n,a[MAXN],now;    //now 用来记录目前未输出的最大零食尺寸。 
    bool book[MAXN];
    int main()
    {
        cin>>n;
        now=n;   //初始化为 n。 
        for(rg int i=1;i<=n;++i)
        	cin>>a[i];
        for(rg int i=1;i<=n;++i)
        {
        	book[a[i]]=1;
        	for(rg int j=now;j>=1;j--)
        	{
        		if(book[j]==1)
        			cout<<j<<" ";   //因为每次是从未输出的开始,已输出的就不用标记。 
        		else
        		{
        			now=j;          //更新 now。 
        			break;
        		}
        	}
        	cout<<endl;
    	}
        return 0;
    }
    

    逃(

  • 相关阅读:
    【LCA倍增】POJ1330-Nearest Common Ancestors
    【AC自动机/fail树】BZOJ3172- [Tjoi2013]单词
    【费用流】BZOJ1221-[HNOI2001] 软件开发
    【KM】POJ2195/HDU1533-Going home
    【KM算法】HDU2255-奔小康赚大钱
    【匈牙利算法】BZOJ1059-[ZJOI2007]矩阵游戏
    【KMP】BZOJ3670-[Noi2014]动物园
    【Treap】BZOJ1588-[HNOI2002]营业额统计
    【Treap模板详细注释】BZOJ3224-普通平衡树
    【tarjan求割顶】BZOJ2730-[HNOI2012]矿场搭建
  • 原文地址:https://www.cnblogs.com/win10crz/p/12859705.html
Copyright © 2020-2023  润新知