洛谷P2527 [SHOI2001]Panda的烦恼
题目描述
panda是个数学怪人,他非常喜欢研究跟别人相反的事情。最近他正在研究筛法,众所周知,对一个范围内的整数,经过筛法处理以后,剩下的全部都是质数,不过panda对这些不感兴趣,他只对被筛掉的数感兴趣,他觉得在这些被筛掉的数中一定隐藏着重要的宇宙秘密,只是人们还没有发现罢了。
panda还觉得如果只是单纯地从小到大筛的话,还不足够发现其中的奥秘,于是他决定对至多只包含某些质因数的数进行研究(比如说至多只包含质因数2,3的数有2,3,4,6,8,9,……),他需要得到这些数中第k小的数(k是panda认为的宇宙系数),请你编个程序,帮助他找到这个数。
输入输出格式
输入格式:
第1行有2个数n,k,n代表质因数的个数,k代表那个宇宙系数(1<=n<=100,1<=k<=100000)
第2行有n个数,代表这n个质因数。(每个均小于1000,且不相同)
输出格式:
仅1行,即至多只包含这n个质因数的数中第k小的数。(这个数不会超过2000000000)
输入输出样例
2 7
3 5
45
说明
样例说明:前6个分别是3,5,9,15,25,27。
分析:一个想法是维护一个优先队列,每次取最小值和所有素数相乘,结果放进优先队列里直到出现k个元素,这样也可以拿到很高的分数,但是不是最好的,对于可以用优先队列做的题,有一个非常常用的方法就是把优先队列转化为普通队列.such as:noip2016蚯蚓,只要想方设法把一个队列变成单调的队列就好了,那么这道题怎么变呢?
先把所有的质数依次放到队列里,一开始是单调的,我们要用优先队列的方式来维护,当一个质数乘了第i个元素后,它下一个乘的一定是第i+1个元素,而且保证结果是单调的。每个质数乘一下后会得到多个质数,找到最小的那个数,插入队列里,在插入之前要先判一下重.
这个判重有点小技巧,我一开始想着一个bool数组,可是太大了开不下,map似乎也不行,其实这个队列是单调的,我们只需要看队尾元素有没有重复就好了......
优先队列---->“单调队列”,神奇的优化.而这个优化的关键,就是我们要如何让它单调,像优先队列一样操作.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <map> using namespace std; const int inf = ; int n,k,prime[],q[],tot,mx;
int cnt[],cc;
map <int,int> flag; int main()
{
scanf("%d%d",&n,&k);
for (int i = ; i <= n; i++)
scanf("%d",&prime[i]);
q[++tot] = ;
for (int i = ; i <= n; i++)
cnt[i] = ;
while (tot != k + )
{
mx = inf;
for (int i = ; i <= n; i++)
{
int t = q[cnt[i]] * prime[i];
if (t < mx)
{
cc = i;
mx = t;
}
}
cnt[cc]++;
if (mx != q[tot])
q[++tot] = mx;
}
printf("%d\n",q[k + ]); return ;
}
洛谷P2527 [SHOI2001]Panda的烦恼的更多相关文章
- 洛谷 P2527 [SHOI2001]Panda的烦恼 解题报告
P2527 [SHOI2001]Panda的烦恼 题目描述 panda是个数学怪人,他非常喜欢研究跟别人相反的事情.最近他正在研究筛法,众所周知,对一个范围内的整数,经过筛法处理以后,剩下的全部都是质 ...
- 洛谷——P2527 [SHOI2001]Panda的烦恼
P2527 [SHOI2001]Panda的烦恼 题目描述 panda是个数学怪人,他非常喜欢研究跟别人相反的事情.最近他正在研究筛法,众所周知,对一个范围内的整数,经过筛法处理以后,剩下的全部都 ...
- BZOJ1935或洛谷2163 [SHOI2007]园丁的烦恼
BZOJ原题链接 洛谷原题链接 很容易想到二维前缀和. 设\(S[i][j]\)表示矩阵\((0, 0)(i, j)\)内树木的棵数,则询问的矩形为\((x, y)(xx, yy)\)时,答案为\(S ...
- 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...
- 洛谷 P2529 [SHOI2001]击鼓传花 解题报告
P2529 [SHOI2001]击鼓传花 题意:求出\(n!\)末尾最后一位非0数字 数据范围:\(n<=10^{100}\) 我们从简单的开始考虑 1.显然,\(n!\)可以被这么表示 \(n ...
- 洛谷 P2163 [SHOI2007]园丁的烦恼 (离线sort,树状数组,解决三维偏序问题)
P2163 [SHOI2007]园丁的烦恼 题目描述 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草. 有一天国王漫步在花园 ...
- 洛谷 P4409 [ZJOI2006] 皇帝的烦恼
题目链接-> OVO 题解: 很久没有写博客了,可能是因为最近太颓废了吧. 刚刚考完期末考试,无比期盼早点外出学习,不要面对成绩,害怕. #include <cstdio> #inc ...
- 洛谷P2526 [SHOI2001]小狗散步(二分图匹配)
题目背景 Grant喜欢带着他的小狗Pandog散步.Grant以一定的速度沿着固定路线走,该路线可能自交.Pandog喜欢游览沿途的景点,不过会在给定的N个点和主人相遇.小狗和主人同时从(X1,Y1 ...
- 洛谷P2530 [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...
随机推荐
- Visual Studio Code配置 HTML 开发环境
Visual Studio Code配置 HTML 开发环境 https://v.qq.com/x/page/l0532svf47c.html?spm=a2h0k.11417342.searchres ...
- 外文翻译 《How we decide》被情感愚弄 第三节
本科论文答辩终于结束啦,一切都要继续回到正轨. 这是第三章章最后一节 书的导言 本章第二节 本章第一节 "信用卡是我的敌人."Herman Palmer这样说到.在平日,Herma ...
- re正则表达式2
1.“字符*” 匹配*前面的字符0次或者多次. 注意:是匹配*前一个字符,只能是*前一个字符多次打印出来.*前面其他的字符相当于前缀会打印出来,但是不会再匹配. *前一个字符前面的其他字符里的首字符先 ...
- Eclipse 闪退/无法启动/一闪而过打解决办法
解决方法 删除文件:/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi 经过实际应用真实有效.
- KendoUI Grid Pager部分 Nan-Nan of x Items
相关问题: http://stackoverflow.com/questions/23941065/pager-error-in-kendo-gridnan-nan-of-1-items http:/ ...
- RHEL6.4上Samba/NFS服务器简单配置
近期在RHEL6.4上尝试搭建一个NAS,底层使用XFS文件系统,对外主要提供samba协议和NFS协议共享,这里把主要步骤记录下来. 环境:RHEL6.4,IP:192.168.50.117 1.关 ...
- PHP一句话后门过狗姿势万千之传输层加工
既然木马已就绪,那么想要利用木马,必然有一个数据传输的过程,数据提交是必须的,数据返回一般也会有的,除非执行特殊命令. 当我们用普通菜刀连接后门时,数据时如何提交的,狗狗又是如何识别的,下面结合一个实 ...
- dumpkeys - 转储显示键盘翻译表
总览 (SYNOPSIS) dumpkeys [ -hilfn1 -Sshape -ccharset --help --short-info --long-info --numeric --full- ...
- vue点击时动态改变样式 ------- 最简单的方法
vue点击时动态改变样式 template中 <li :class="{ active:index==isActive }" @click="changeValue ...
- vscode F12 不能用,原来是快捷键冲突了。
vscode F12 不能用,原来是快捷键冲突了.