联想算法题-发牌序列

简介: 联想算法题-发牌序列

联想算法题-发牌序列

问题描述

小A和小B在玩纸牌。每张牌上都有一个点数,所有的牌都背面朝上叠放成一个牌堆,现在他们在研究如何发牌。

他们研究出的发牌策略如下:小A每次将牌堆顶的那一张牌发出,每次发牌前,小B都会进行一次切牌,假设目前牌堆中有n张牌,那么小B会将前⌊n/3⌋张牌从牌堆顶依次放到牌堆底(⌊x⌋表示将x向下取整)。现在给你初始的牌堆中从顶到底每张牌的点数,请问按照上述发牌策略,最终得到的发牌序列是怎样的?

例如初始牌堆为[4, 5, 2, 3, 1, 2](从左往右分别是牌堆中从顶到底每张牌的点数),首先小B将前⌊6/3⌋=2张牌放到牌堆底部,牌堆变为[2, 3, 1, 2, 4, 5],然后小A将牌堆顶的2发出,牌堆变为[3, 1, 2, 4, 5]。小B再将前⌊5/3⌋=1张牌放到牌堆底部,牌堆变为[1, 2, 4, 5, 3],然后小A及那个牌堆顶的1发出,牌堆变为[2, 4, 5, 3]……按照发牌策略继续操作后,可以得到最终的发牌序列是[2, 1, 4, 3, 2, 5]

输入描述

第一行是一个正整数n,表示初始牌堆中有n张牌。

第二行是n个正整数a_1, a_2, …, a_n,第i个数a_i表示牌堆从顶向底第i张牌的点数。

输出描述

一行n个用空格隔开的正整数b_1, b_2, …, b_n,其中b_i表示第i次发出的牌的点数。

输入样例1

6

4 5 2 3 1 2

输出样例1

2 1 4 3 2 5

数据范围和说明

30%的数据保证:1<=n<=10, 1<=a_i<=1000

80%的数据保证:1<=n<=100, 1<=a_i<=1000

100%的数据保证 :1<=n<=1000, 1<=a_i<=1000

算法思路:

这个题的思路是模拟,通过双端队列模拟这个过程,难度不是很大。

#include<iostream>
#include<vector>
#include<deque>
using namespace std;
int main()
{
    int n;
    deque<int> a;
    vector<int> res;
    cin >> n;
    for (int i = 0; i < n; ++ i)
    {
        int t;
        cin >> t;
        a.push_back(t);
    }
    while(a.size())
    {
        int m = a.size() / 3;
        vector<int> b;
        for (int i = 0; i < m; ++ i)
        {
            b.push_back(a.front());
            a.pop_front();
        }
        for (int i = 0; i < m; ++ i)
        {
            a.push_back(b[i]);    
        }
        res.push_back(a.front());
        a.pop_front();
    }
    for (int i = 0; i < res.size(); ++ i)
    {
        cout << res[i] << " ";
    }
    return 0;
}
相关文章
|
2天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
104 80
|
2月前
|
算法
动态规划算法学习四:最大上升子序列问题(LIS:Longest Increasing Subsequence)
这篇文章介绍了动态规划算法中解决最大上升子序列问题(LIS)的方法,包括问题的描述、动态规划的步骤、状态表示、递推方程、计算最优值以及优化方法,如非动态规划的二分法。
81 0
动态规划算法学习四:最大上升子序列问题(LIS:Longest Increasing Subsequence)
|
3月前
|
算法 数据可视化
基于SSA奇异谱分析算法的时间序列趋势线提取matlab仿真
奇异谱分析(SSA)是一种基于奇异值分解(SVD)和轨迹矩阵的非线性、非参数时间序列分析方法,适用于提取趋势、周期性和噪声成分。本项目使用MATLAB 2022a版本实现从强干扰序列中提取趋势线,并通过可视化展示了原时间序列与提取的趋势分量。代码实现了滑动窗口下的奇异值分解和分组重构,适用于非线性和非平稳时间序列分析。此方法在气候变化、金融市场和生物医学信号处理等领域有广泛应用。
207 19
|
3月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
4月前
|
机器学习/深度学习 数据采集 算法
【优秀python算法毕设】基于python时间序列模型分析气温变化趋势的设计与实现
本文介绍了一个基于Python的时间序列模型,用于分析和预测2021-2022年重庆地区的气温变化趋势,通过ARIMA和LSTM模型的应用,揭示了气温的季节性和趋势性变化,并提供了对未来气温变化的预测,有助于气象预报和相关决策制定。
146 1
【优秀python算法毕设】基于python时间序列模型分析气温变化趋势的设计与实现
|
5月前
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
321 1
|
4月前
|
算法
【算法】栈算法——栈的压入、弹出序列
【算法】栈算法——栈的压入、弹出序列
|
5月前
|
机器学习/深度学习 数据采集 算法
Python实现Prophet时间序列数据建模与异常值检测(Prophet算法)项目实战
Python实现Prophet时间序列数据建模与异常值检测(Prophet算法)项目实战
|
4月前
|
算法 Java
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
LeetCode初级算法题:子数组最大平均数+二叉树的最小深度+最长连续递增序列+柠檬水找零
45 0
|
6月前
|
机器学习/深度学习 人工智能 算法
【机器学习】Q-Learning算法:在序列决策问题中的实践与探索
【机器学习】Q-Learning算法:在序列决策问题中的实践与探索
154 0
【机器学习】Q-Learning算法:在序列决策问题中的实践与探索