【BZOJ-4524】伪光滑数 堆 + 贪心 (暴力) [可持久化可并堆 + DP]
4524: [Cqoi2016]伪光滑数
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 183 Solved: 82
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
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]相关推荐
- BZOJ 1029: [JSOI2007]建筑抢修 堆+贪心
1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的 入侵者.但 ...
- BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2151 是 hydro 的 BZOJ ...
- BZOJ 2135 刷题计划(贪心,求导,二分)【BZOJ 修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2135 是 hydro 的 BZOJ ...
- 【数据结构基础/接口函数编写】二叉树第一弹之树和堆的概念和结构、基础堆接口函数的实现(编写思路加逻辑分析加代码实操,一应俱全的汇总)
文章目录 树的概念及结构 树的概念 树的相关概念 树的表示 二叉树的概念及结构 二叉树的概念 特殊的二叉树: 二叉树的存储结构 二叉树的性质 顺序储存 链式储存 堆 堆的概念及结构 堆的实现 头文件 ...
- 大根堆的删除c语言,二叉堆(一)之 C语言详解
本文介绍二叉堆,二叉堆就是通常我们所说的数据结构"堆"中的一种.和以往一样,本文会先对二叉堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现: ...
- UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)
UOJ #131 BZOJ 4199 luogu P2178[NOI2015]品酒大会 (后缀自动机.树形DP) 水是水,但是写出了不少问题,因此写一发博客. https://www.luogu.or ...
- leetcode 650. 2 Keys Keyboard | 650. 只有两个键的键盘(暴力递归->傻缓存->DP)
题目 https://leetcode.com/problems/2-keys-keyboard/description/ 题解 再一次印证了我在 总结 DP 模型套路 中说的:从递归->DP之 ...
- java栈 类 堆_详细介绍Java中的堆和栈
栈与堆都是Java用来在RAM中寄存数据的中央.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运转时数据区,类的对象从中分配空间.这些对象经过new.newar ...
- java 二叉堆_【数据结构】二叉堆:Java实现最大堆及堆排序
堆在逻辑上一棵完全二叉树,所以可以通过数组进行数据存储,而其余的树大多采用链式结构进行数据存储 堆分类: 大顶堆:大顶堆就是无论在任何一棵(子)树中,父节点都是最大的 小顶堆:小顶堆就是无论在任何一棵 ...
最新文章
- 我在 GitHub 上都见过哪些沙雕项目?
- 实现容器的底层技术--云平台技术栈06
- 月饼哪家强?Python 告诉你
- 车载wince系统刷界面ui_2020年值得关注的10个UI设计趋势!
- js相对路径相关(比如:js中的路径依赖导入该js文件的路径)
- 是人是谁_其实,我们每个人心中都有一把尺子,谁好谁歹谁心里都明白……
- 程序员自我提高情绪10招
- Linux笔记-centos7替换yum及编译安装mydumper
- OJ1030: 判断直角三角形
- 【latex】输入公式与编号
- 魅族16s Pro邀请函发布:对称式全面屏+骁龙855Plus
- 服务器报告它来自digest_2020年全球服务器市场规模及竞争格局分析
- C++字符操作函数cctype库
- c语言之图形编程 pdf,《C语言图形编程》.pdf
- 国内使用谷歌健身的方法
- 使用高德地图实现根据地名查询经纬度
- 聊聊一周的启发,关于读书和职场
- 无法打开网页但可以登录电脑微信 解决办法
- 第三届强网杯线上赛记录
- 红帽8使用nfs共享本地镜像
热门文章
- java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...
- css3 混合,css3混合模式
- tp801单板微型计算机是什么,给TP801单板机配接RX—80打印机
- java排序链表冒泡排序_Java中的冒泡排序
- AngularJS自定义指令教程第2部分
- C++进阶教程之动态内存
- C++基础教程之指针
- mac 删除 Windows 或 EFI Boot 启动盘的方法
- 这款游戏玩法是Low了点,但赚的却是实打实的EOS。
- xcodebuild -exportArchive -allowProvisioningUpdates