当前位置: 首页 > article >正文

PTA L2-045 堆宝塔 (25 分)


堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小,按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下:

  • 首先准备两根柱子,一根 A 柱串宝塔,一根 B 柱用于临时叠放。
  • 把第 1 块彩虹圈作为第 1 座宝塔的基座,在 A 柱放好。
  • 将抓到的下一块彩虹圈 C 跟当前 A 柱宝塔最上面的彩虹圈比一下,如果比最上面的小,就直接放上去;否则把 C 跟 B 柱最上面的彩虹圈比一下:
  • 如果 B 柱是空的、或者 C 大,就在 B 柱上放好;
  • 否则把 A 柱上串好的宝塔取下来作为一件成品;然后把 B 柱上所有比 C 大的彩虹圈逐一取下放到 A 柱上,最后把 C 也放到 A 柱上。

重复此步骤,直到所有的彩虹圈都被抓完。最后 A 柱上剩下的宝塔作为一件成品,B 柱上剩下的彩虹圈被逐一取下,堆成另一座宝塔。问:宝宝一共堆出了几个宝塔?最高的宝塔有多少层?

输入格式:

输入第一行给出一个正整数 N ( ≤ 1 0 3 ) N(≤10^3) N103,为彩虹圈的个数。第二行按照宝宝抓取的顺序给出 N N N 个不超过 100 100 100 的正整数,对应每个彩虹圈的直径。

输出格式:

在一行中输出宝宝堆出的宝塔个数,和最高的宝塔的层数。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

11
10 8 9 5 12 11 4 3 1 9 15

输出样例:

4 5

样例解释:

宝宝堆成的宝塔顺次为:

  • 10、8、5
  • 12、11、4、3、1
  • 9
  • 15、9
#include<bits/stdc++.h>
using namespace std;

int main()
{
	vector<vector<int>> res;
	vector<int> a,b;

	int n;cin>>n;
	while(n--)
	{
		int x;cin>>x;
		if(a.empty()) a.push_back(x);//如果 A 为空,先放一个
		else if(x<a.back()) a.push_back(x);//如果比 A 最上面的小,就直接放上去
		else if(b.empty()||x>b.back()) b.push_back(x);//如果 B 柱是空的、或者 C 大,就在 B 柱上放好;
        else
        {
            res.push_back(a);a.clear();// A 记作一件成品
            while(!b.empty()&&b.back()>x) // 把 B 柱上所有比 C 大的彩虹圈逐一取下放到 A 柱上
            {
                a.push_back(b.back());
                b.pop_back();
            }
            a.push_back(x); // 最后把 C 也放到 A 柱上。
        }
	}

	if(!a.empty()) res.push_back(a);
	if(!b.empty()) res.push_back(b);

	int mx=0;
	for(auto &c:res)
		mx=max(mx,(int)c.size());
	cout<<(int)res.size()<<" "<<mx;

	return 0;
}

http://www.kler.cn/a/14704.html

相关文章:

  • Android13 wifi状态问题分析
  • 适合程序员阅读的有用书籍:
  • Windows逆向安全(一)之基础知识(十八)
  • 2023首场亚马逊云科技行业峰会,医疗与生命科学年度盛会精彩先行
  • vue生命周期的理解?
  • 九款顶级AI工具推荐
  • 2023年制造业产品经理NPDP认证报名入口及指南
  • 【STL十四】函数对象(function object)_仿函数(functor)——lambda表达式
  • 07_阻塞队列(BlockingQueue)
  • Hibernate的查询和抓取策略
  • Numpy从入门到精通——存读矩阵以及读取矩阵中的数据
  • PostgreSQL标准复制方案
  • springboot JWT 搭建授权服务器
  • C语言从入门到精通第10天(break和continue的使用)
  • 如何实现Spring AOP以及Spring AOP的实现原理
  • [Daimayuan] 走不出的迷宫(C++,图论,DP)
  • 体验 buildah
  • ESP32设备驱动-LIS3MDL磁场传感器驱动
  • 2023年4月份上新的图像领域分割模型设计系列论文(一)
  • c语言如何通过修改文件的方式配置 Linux 网络参数