贤鱼的刷题日常(数据结构队列学习)-2729:Blah数集--题目详解

简介: >🏆今日学习目标:🍀例题讲解2729:Blah数集✅创作者:贤鱼⏰预计时间:25分钟
🏆今日学习目标:
🍀例题讲解2729:Blah数集
✅创作者:贤鱼
⏰预计时间:25分钟

请添加图片描述
@TOC

总时间限制: 3000ms 内存限制: 65536kB
描述
大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下:
(1) a是集合Ba的基,且a是Ba的第一个元素;
(2)如果x在集合Ba中,则2x+1和3x+1也都在集合Ba中;
(3)没有其他元素在集合Ba中了。
现在小高斯想知道如果将集合Ba中元素按照升序排列,第N个元素会是多少?
输入
输入包括很多行,每行输入包括两个数字,集合的基a(1<=a<=50))以及所求元素序号n(1<=n<=1000000)
输出
对于每个输入,输出集合Ba的第n个元素值
样例输入

1 100
28 5437

样例输出

418
900585

思路

我们用队列储存*2和*3的两个数据
注意
我们要找到两个队列中的一个数字,出队,利用这个数字继续2和3
如果两个数字一样一起出队随便拉出来一个计算,反正俩一样

为什么选择小的一个?
小的数字*完一定比大的*完小对吧,这样可以 避免漏数字
我们找到小的数字 完入队继续找,这样子永远不会漏掉某些数字,如果大的一个小的这次漏掉一个,下次两个,在下次四个,问题大了

AC代码

#include<cmath>
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
queue<int>q1,q2;
int n,m;
int main(){
    while(cin>>n>>m){
        q1=queue<int>();
        q2=queue<int>();
        for(int i=2;i<=m;i++){
            q1.push(n*2+1);
            q2.push(n*3+1);
            if(q1.front()>q2.front()){
                n=q2.front();
                q2.pop();
            }else if(q1.front()<q2.front()){
                n=q1.front();
                q1.pop();
            }else{
                n=q1.front();
                q1.pop();
                q2.pop();
            }
        }
        cout<<n<<endl;
    }
}

请添加图片描述

相关文章
|
1天前
|
算法
数据结构与算法:栈与队列
数据结构与算法:栈与队列
|
4天前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
12 0
|
4天前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
13 1
|
4天前
|
存储 NoSQL 安全
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
Redis系列学习文章分享---第十五篇(Redis最佳实践--设计优雅的key+合适的数据结构+持久化如何配置+慢查询问题解决)
13 1
|
7天前
【海贼王的数据航海】栈和队列
【海贼王的数据航海】栈和队列
6 0
|
7天前
|
算法 C语言
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
【数据结构与算法 经典例题】使用栈实现队列(图文详解)
|
7天前
|
算法 C语言
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
【数据结构与算法 经典例题】使用队列实现栈(图文详解)
|
7天前
|
算法 程序员 数据处理
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
【数据结构与算法】使用单链表实现队列:原理、步骤与应用
|
7天前
|
算法
【数据结构和算法】---栈和队列的互相实现
【数据结构和算法】---栈和队列的互相实现
7 0
|
1天前
|
存储 缓存 算法
堆和栈的区别及应用场景
堆和栈的区别及应用场景