2021.08.01 P4359 伪光滑数(二叉堆)
2021.08.01 P4359 伪光滑数(二叉堆)
[P4359 CQOI2016]伪光滑数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:
若一个大于 11 的整数 MM 的质因数分解有 k 项,其最大的质因子为 a_k,并且满足
\]
,我们就称整数 M 为 N - 伪光滑数。
现在给出 NN,求所有整数中,第 KK 大的 NN - 伪光滑数。
分析:
在k一定时,如果已知p_maxn,则val_maxn=k*p_maxn,每次改去一个质因数p_maxn,压入队列。运用多路归并的思想。
代码如下:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
#define int long long
int n,k;
int p[40]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127};
struct node{
int val,maxn,k,last;
bool operator <(const node &b)const{
return val<b.val;
}
};
priority_queue<node>q;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
signed main(){
n=read();k=read();
for(int i=1;i<=31;i++){
int x=p[i];
for(int j=1;x<=n;j++,x*=p[i])q.push({x,p[i],j,i-1});
}
while(k--){
node tmp=q.top();
q.pop();
if(!k)return cout<<tmp.val,0;
if(tmp.k>1)for(int i=1;i<=tmp.last;i++)
q.push({tmp.val/tmp.maxn*p[i],tmp.maxn,tmp.k-1,i});
}
return 0;
}
2021.08.01 P4359 伪光滑数(二叉堆)的更多相关文章
- 【BZOJ-4524】伪光滑数 堆 + 贪心 (暴力) [可持久化可并堆 + DP]
4524: [Cqoi2016]伪光滑数 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 183 Solved: 82[Submit][Status] ...
- 【BZOJ4524】[Cqoi2016]伪光滑数 堆(模拟搜索)
[BZOJ4524][Cqoi2016]伪光滑数 Description 若一个大于1的整数M的质因数分解有k项,其最大的质因子为Ak,并且满足Ak^K<=N,Ak<128,我们就称整数M ...
- Loj 2047 伪光滑数
Loj 2047 伪光滑数 正解较复杂,但这道题其实可以通过暴力解决. 预处理出 \(128\) 内的所有质数,把 \(n\) 内的 \(prime[i]^j\) 丢进堆中,再尝试对每个数变形,除一个 ...
- @bzoj - 4524@ [Cqoi2016]伪光滑数
目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...
- 2021.08.01 P4311 数字序列(左偏树)
2021.08.01 P4311 数字序列(左偏树) [P4331 BalticOI 2004]Sequence 数字序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1 ...
- 2021.08.01 P3377 左偏树模板
2021.08.01 P3377 左偏树模板 P3377 [模板]左偏树(可并堆) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> ...
- 二叉堆(一)之 图文解析 和 C语言的实现
概要 本章介绍二叉堆,二叉堆就是通常我们所说的数据结构中"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本 ...
- 二叉堆(二)之 C++的实现
概要 上一章介绍了堆和二叉堆的基本概念,并通过C语言实现了二叉堆.本章是二叉堆的C++实现. 目录1. 二叉堆的介绍2. 二叉堆的图文解析3. 二叉堆的C++实现(完整源码)4. 二叉堆的C++测试程 ...
- 二叉堆(三)之 Java的实现
概要 前面分别通过C和C++实现了二叉堆,本章给出二叉堆的Java版本.还是那句话,它们的原理一样,择其一了解即可. 目录1. 二叉堆的介绍2. 二叉堆的图文解析3. 二叉堆的Java实现(完整源码) ...
随机推荐
- 使用Cobalt Strike来钓鱼(MS Office Macro)
Cobalt Strike操作 点击Cobalt Strike主界面中attacks->packages->ms office macro 弹出界面选择Listener,单机确定 对话框中 ...
- 解决centos7服务器shadows已启动但是无法连接的问题
firewall-cmd --permanent --add-port=8989/tcp firewall-cmd --reload 这是由于centos7防火墙并没有开放ss端口的问题 添加json ...
- 半吊子菜鸟学Web开发1 --配置开发环境
先说说我自己的情况,我算是一个半吊子菜鸟,对web开发熟练度为0,但是对熟悉C++和Python 所以这里开始记录我学习Web开发的历程,看看我这里学习的程序,能够学到什么地方. 首先是配置环境,我的 ...
- python 装饰器函数基础知识
1.装饰器的本质--一个闭包函数 2.装饰器的功能--在不改变原函数及其调用方式情况下对原函数功能进行拓展 3.带参数和返回值的装饰器 def timer(func): @wraps(func) #使 ...
- mac phpstorm返回文件顶部或者底部
在Mac下,请按FN+Command+→|←,就这么简单~
- elasticsearch 的倒排索引是什么 ?
解答:通俗解释一下就可以. 传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置. 而倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典+映射表 即为倒排索引. 有了倒排索引,就能实现 ...
- weevely使用小结
Weevely 写在前面 由于比赛不确定会不会提供菜刀或者蚁剑,这里我稍微对weevely进行简单介绍一下,具体还是请看官方文档,官方文档讲的很详细(前提你英语嘚不错) 官方文档:https://gi ...
- xacro 语法总结
xacro是为了解决在编写urdf文件过程中,出现的标签内容重复,但又不得不去写.一些值的计算有依赖的问题.为了和urdf文件区分,我们定义的模型文件名后缀为.xacro. 从功能的角度来说,xacr ...
- 算法 | 串匹配算法之KMP算法及其优化
主串 s:A B D A B C A B C 子串 t: A B C A B 问题:在主串 s 中是否存在一段 t 的子串呢? 形如上述问题,就是串匹配类问题.[串匹配--百度百科] 串匹配问题是一 ...
- 简单的多选框选择功能js代码
最近没事写了个特别基础的多选框功能代码,代码如下:js部分: //获取所有class为checkbox的多选按钮(需要以下功能需要先写出对应功能的元素). var checkBoxList = doc ...