4524: [Cqoi2016]伪光滑数

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 183  Solved: 82
[Submit][Status][Discuss]

Description

若一个大于R的整数J的质因数分解有F项,其最大的质因子为ak,并且满足ak^k≤N,
ak<128,我们就称整数J为N-伪光滑数。
现在给出L,求所有整数中,第E大的N-伪光滑数。

Input

只有一行,为用空格隔开的整数L和E。
2 ≤ N ≤ 10^18, 1 ≤ K ≤ 800000,保证至少有 E 个满足要求的数

Output

只有一行,为一个整数,表示答案。

Sample Input

12345 20

Sample Output

9167

HINT

Source

Solution

正解是可持久化可并堆+DP,抱歉,不会...于是采用乱搞的暴力做法..

预处理出$<128$的全部质数,那么很显然,可以对数进行拆分了.

考虑题目中所说的, 所以不妨枚举倍数,对于$prime[i]^{j}$,扔进堆中,但要维护的不只一个量

然后从队首取K次即可,对于每次取出的数,除以它的最大质因子,乘上比他最大质因子小的最大的质数,再扔回堆中

方便实现这些修改,不妨在堆中记录每个数data,最大值因子次数zs,较小一位的质数的坐标nt,最大值因子的下标mp

启发:

认真计算时间复杂度,在不会最优正解的情况下,也可以写出符合时间复杂度的暴力解

类似的题目,多从质因数上考虑.实际上质数本身量较少,符合的质因子更少,所以效率会比较高效

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
struct Node
{ long long data; int zs,nt,mp; bool operator < (const Node & A) const{return data<A.data;}
}now,tmp;
priority_queue <Node> q;
long long n,x; int k,j;
int prime[50]={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},cnt=31;
int main()
{ scanf("%lld%d",&n,&k);for (int i=1; i<=cnt; i++)  for (x=j=1; ; j++) { x*=(long long)prime[i]; if (x>n) break;tmp.data=x,tmp.zs=j,tmp.nt=i-1,tmp.mp=i;//printf("%lld %d %d %d\n",tmp.data,tmp.zs,tmp.nt,tmp.mp);
                q.push(tmp);  } while (k--) { now=q.top(); q.pop(); if (now.zs>1) for (int i=now.nt; i; i--) {   tmp.data=(long long)now.data/prime[now.mp]*prime[i]; tmp.zs=now.zs-1; tmp.nt=i; tmp.mp=now.mp; //printf("%lld %d %d %d\n",tmp.data,tmp.zs,tmp.nt,tmp.mp);
                        q.push(tmp); } } printf("%lld\n",now.data); return 0;
}

转载于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5467682.html

【BZOJ-4524】伪光滑数 堆 + 贪心 (暴力) [可持久化可并堆 + DP]相关推荐

  1. BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心

    1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的 入侵者.但 ...

  2. BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...

  3. BZOJ 2135 刷题计划(贪心,求导,二分)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2135 是 hydro 的 BZOJ ...

  4. 【数据结构基础/接口函数编写】二叉树第一弹之树和堆的概念和结构、基础堆接口函数的实现(编写思路加逻辑分析加代码实操,一应俱全的汇总)

    文章目录 树的概念及结构 树的概念 树的相关概念 树的表示 二叉树的概念及结构 二叉树的概念 特殊的二叉树: 二叉树的存储结构 二叉树的性质 顺序储存 链式储存 堆 堆的概念及结构 堆的实现 头文件 ...

  5. 大根堆的删除c语言,二叉堆(一)之 C语言详解

    本文介绍二叉堆,二叉堆就是通常我们所说的数据结构"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现: ...

  6. UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)

    UOJ #131 BZOJ 4199 luogu P2178[NOI2015]品酒大会 (后缀自动机.树形DP) 水是水,但是写出了不少问题,因此写一发博客. https://www.luogu.or ...

  7. leetcode 650. 2 Keys Keyboard | 650. 只有两个键的键盘(暴力递归->傻缓存->DP)

    题目 https://leetcode.com/problems/2-keys-keyboard/description/ 题解 再一次印证了我在 总结 DP 模型套路 中说的:从递归->DP之 ...

  8. java栈 类 堆_详细介绍Java中的堆和栈

    栈与堆都是Java用来在RAM中寄存数据的中央.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运转时数据区,类的对象从中分配空间.这些对象经过new.newar ...

  9. java 二叉堆_【数据结构】二叉堆:Java实现最大堆及堆排序

    堆在逻辑上一棵完全二叉树,所以可以通过数组进行数据存储,而其余的树大多采用链式结构进行数据存储 堆分类: 大顶堆:大顶堆就是无论在任何一棵(子)树中,父节点都是最大的 小顶堆:小顶堆就是无论在任何一棵 ...

最新文章

  1. 我在 GitHub 上都见过哪些沙雕项目?
  2. 实现容器的底层技术--云平台技术栈06
  3. 月饼哪家强?Python 告诉你
  4. 车载wince系统刷界面ui_2020年值得关注的10个UI设计趋势!
  5. js相对路径相关(比如:js中的路径依赖导入该js文件的路径)
  6. 是人是谁_其实,我们每个人心中都有一把尺子,谁好谁歹谁心里都明白……
  7. 程序员自我提高情绪10招
  8. Linux笔记-centos7替换yum及编译安装mydumper
  9. OJ1030: 判断直角三角形
  10. 【latex】输入公式与编号
  11. 魅族16s Pro邀请函发布:对称式全面屏+骁龙855Plus
  12. 服务器报告它来自digest_2020年全球服务器市场规模及竞争格局分析
  13. C++字符操作函数cctype库
  14. c语言之图形编程 pdf,《C语言图形编程》.pdf
  15. 国内使用谷歌健身的方法
  16. 使用高德地图实现根据地名查询经纬度
  17. 聊聊一周的启发,关于读书和职场
  18. 无法打开网页但可以登录电脑微信 解决办法
  19. 第三届强网杯线上赛记录
  20. 红帽8使用nfs共享本地镜像

热门文章

  1. java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...
  2. css3 混合,css3混合模式
  3. tp801单板微型计算机是什么,给TP801单板机配接RX—80打印机
  4. java排序链表冒泡排序_Java中的冒泡排序
  5. AngularJS自定义指令教程第2部分
  6. C++进阶教程之动态内存
  7. C++基础教程之指针
  8. mac 删除 Windows 或 EFI Boot 启动盘的方法
  9. 这款游戏玩法是Low了点,但赚的却是实打实的EOS。
  10. xcodebuild -exportArchive -allowProvisioningUpdates