第一周算法设计与分析 G : 排队援救

简介: 这篇文章介绍了解决算法问题"排队援救"的方法,通过使用队列和映射来模拟救援点的排队过程,并确定最终得到救援的人的顺序和编号。

G : 排队援救

Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 69 Solved: 22

Description

突发重大灾难,n个人陷入困境,有一个救援点需要人们排队准备接受救援,假设每个人有一个名望值,进队规则如下:
第一个人直接进队;
当队里已经有人时,新来的人发现队尾的人的名望值比自己大或者相等,他会选择离开去其他救援点;
队伍最多5人,如果一个人要进队时,发现队伍已满,而且他的名望值比队尾的人大,他会选择把队首的人挤掉而继续排在队尾。
问最后得到救援的人分别是谁。

Input 单组数据。

第一行为n(1 ≤ n ≤ 100),n为正整数。

第二行为n个人的名望值,第i个去排队的人的名望值为ai (1 ≤ ai≤ 232 - 1),且为正整数。

Output

按顺序输出最后得到救援的人的号码,一个人号码是多少即为他是第几个去排队的。

Sample Input

6
1 3 5 7 9 11

Sample Output

2 3 4 5 6

Hint

一、题目大意

设计一个队列模仿,进队,出队,获取当前队列的队尾数值,获取队列的大小,判断队列是否为空。

二、思路

1、储备知识

队列原则:先入先出

a.队列相关的五个函数
函数 功能 例子
push() 入队 queue< int> qu;qu.push(5),qu.push(2),qu.push(0);。则队列里面就有三个数: 5 ,2,0
pop() 出队 qu.pop()后,则现在队列只剩2,0
back() 返回队尾值 此时:qu.back()=0
size() 返回队列长度 此时:qu.size()=2
empty() 判断队列是否为空 此时:qu.empty()=0,表示队列不为空,这一般用于循环取出队列值

注1:头文件:#include
注2:出队的时候需要保证队列不为空
注3:队列实际是一个模板类,初始化的时候需要指定类型,可以是基础类型也可以是自定义类型。如上文中的:queuequ;

b.映射map相关功能的实现

map
映射相当于f(key)->value,类似一个函数

功能 例子
初始化 mapma;//建立了一个int到int的映射
增/改 直接当做左值即可,ma[3]=2,默认ma[3]=0
ma[3]=0
ma[3],对ma[3]进行操作就行了

注1:头文件#include
注2:初始化后,如果value为整数,默认value为0

2、思路

每输入一个声望进行判断
第一步:为每个声望值所代表的人进行编号
第二步:如果队列为空,或者新输入的值大于队尾,则插入
第三步:如果队列大小超过5人则执行出队操作

循环结束后,在对取出队列中的数,对每个数查找对应编号即可

#include<iostream>
#include<map>
#include<queue>
using namespace std;
int main()
{
    map<int,int>ma;
    queue<int>qu;
    int n,num;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>num;
        if(!ma[num])ma[num]=i;                         //如果之前没有记录过,就记录声望值num是第几个排队的人
        if(qu.empty()||num>qu.back()) qu.push(num);    //如果队列是空的或者队尾的数字比num小,就进队
        if(qu.size()>5)qu.pop();                       //如果救援队列大于五就弹出
    }
    while(!qu.empty())
    {
        cout<<ma[qu.front()]<<" ";
        qu.pop();
    }
    return 0;
}
相关文章
|
21天前
|
数据采集 机器学习/深度学习 算法
|
17天前
|
人工智能 算法 BI
第一周算法设计与分析 D : 两面包夹芝士
这篇文章介绍了解决算法问题"两面包夹芝士"的方法,通过找出两个数组中的最大最小值,计算这两个值之间的整数个数,包括特判不存在整数的情况。
|
9天前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
|
17天前
|
算法
算法设计与分析作业
这篇文章是关于算法设计与分析的作业,其中包含了两个算法实现:一个是使用分治算法实现的十进制大整数相乘(包括加法、减法和乘法函数),并进行了正确性和健壮性测试;另一个是使用快速排序思想实现的分治查找第K小元素的程序,并分析了其平均和最坏时间复杂度。
算法设计与分析作业
|
30天前
|
算法 Java 测试技术
算法分析(蛮力法与减治算法应用实验报告)
这篇文章是关于算法分析的实验报告,介绍了如何使用蛮力法解决背包问题,并通过伪代码和Java代码实现,同时分析了其时间效率;还介绍了基于减治法思想实现的二叉查找树的插入与查找,同样提供了伪代码、Java源代码实现和时间效率分析,最后展示了测试结果截图。
算法分析(蛮力法与减治算法应用实验报告)
|
13天前
|
编解码 算法 图形学
同一路RTSP|RTMP流如何同时回调YUV和RGB数据实现渲染和算法分析
我们播放RTSP|RTMP流,如果需要同时做渲染和算法分析的话,特别是渲染在上层实现(比如Unity),算法是python这种情况,拉两路流,更耗费带宽和性能,拉一路流,同时回调YUV和RGB数据也可以,但是更灵活的是本文提到的按需转算法期望的RGB数据,然后做算法处理
|
1月前
|
机器学习/深度学习 数据采集 算法
【优秀python算法毕设】基于python时间序列模型分析气温变化趋势的设计与实现
本文介绍了一个基于Python的时间序列模型,用于分析和预测2021-2022年重庆地区的气温变化趋势,通过ARIMA和LSTM模型的应用,揭示了气温的季节性和趋势性变化,并提供了对未来气温变化的预测,有助于气象预报和相关决策制定。
【优秀python算法毕设】基于python时间序列模型分析气温变化趋势的设计与实现
|
17天前
|
人工智能 算法
第一周算法设计与分析:C : 200和整数对之间的情缘
这篇文章介绍了解决算法问题"200和整数对之间的情缘"的方法,通过统计数组中每个数模200的余数,并计算每个同余类中数的组合数来找出所有满足条件的整数对(i, j),使得\( A_i - A_j \)是200的整数倍。
|
17天前
|
算法 C++
第一周算法设计与分析 E : 构造回文串
这篇文章介绍了解决算法问题"构造回文串"的方法,即判断给定的整数N(视为字符串)是否可以通过在前面添加任意个0(或不添加)来构造一个回文串,并给出了相应的C++代码实现。
|
28天前
|
机器学习/深度学习 人工智能 算法
【人工智能】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例
传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述
40 2