Prime Gift(prime)

题目描述

Jyt有nn个质数,分别为p1,p2,p3…,pnp1,p2,p3…,pn。

她认为一个数xx是优秀的,当且仅当xx的所有质因子都在这nn个质数中。

她想知道第kk大的优秀的数是多少。保证答案不超过10181018。

输入

第一行一个整数nn,表示质数的个数。

第二行nn个升序排列的质数,第ii个数表示pipi。

第三行一个整数kk,表示要求的是第kk大的数。

输出

一行,表示第kk大的优秀的数。

样例输入

<span style="color:#333333"><span style="color:#333333">#### 样例输入1
3
2 3 5
7
#### 样例输入2
5
3 7 11 13 31
17</span></span>

样例输出

<span style="color:#333333"><span style="color:#333333"> 样例输出1
8
样例输出2
93</span></span>

提示

数据规模及约定

对于10%的数据,n≤2n≤2。

对于30%的数据,n≤5n≤5。

对于60%的数据,n≤10n≤10。

对于100%的数据,n≤16,2≤pi≤100n≤16,2≤pi≤100。

来源

Codeforces912E


solution

神奇题

考虑爆搜,显然数目太多了。

把数字分为两组,可以奇数下标一组,偶数下标一组

有点像meet-in-middle

但这样我们没法一次算出答案。

再二分一下即可。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<queue>
#define ll long long
#define Top 1e18
using namespace std;
int k,n,s[20];
ll q1[5000005],q2[5000005],l,r,t1,t2;
ll pd(ll num)
{
ll cnt=0,p=t2;
for(int i=1;i<=t1;i++){
while(q2[p]>num/q1[i])p--;
cnt+=p;
}
return cnt;
}
void dfs(ll x,int las){
q1[++t1]=x;
for(int i=las;i<=k;i+=2){
if(x<=Top/(ll)s[i])dfs(s[i]*x,i);
}
}
void DFS(ll x,int las){
q2[++t2]=x;
for(int i=las;i<=k;i+=2){
if(x<=Top/(ll)s[i])DFS(s[i]*x,i);
}
}
int main()
{
cin>>k;
for(int i=1;i<=k;i++){
scanf("%d",&s[i]);
}
cin>>n;
dfs(1,1);DFS(1,2); sort(q1+1,q1+t1+1);
sort(q2+1,q2+t2+1);
l=1,r=1e18; while(l<r){
//cout<<l<<' '<<r<<endl;
ll mid=l+r>>1;
ll t=pd(mid);
if(t<n)l=mid+1;
if(t==n)r=mid;
if(t>n) r=mid-1;
}
cout<<l<<endl;
return 0;
}

Prime Gift(prime)的更多相关文章

  1. Codeforces 912E - Prime Gift

    912E - Prime Gift 思路: 折半枚举+二分check 将素数分成两个集合(最好按奇偶位置来,保证两集合个数相近),这样每个集合枚举出来的小于1e18的积个数小于1e6. 然后二分答案, ...

  2. Codeforces 912 E.Prime Gift (折半枚举、二分)

    题目链接:Prime Gift 题意: 给出了n(1<=n<=16)个互不相同的质数pi(2<=pi<=100),现在要求第k大个约数全在所给质数集的数.(保证这个数不超过1e ...

  3. Codeforces 912E Prime Gift(预处理 + 双指针 + 二分答案)

    题目链接 Prime Gift 题意  给定一个素数集合,求第k小的数,满足这个数的所有质因子集合为给定的集合的子集. 保证答案不超过$10^{18}$ 考虑二分答案. 根据折半的思想,首先我们把这个 ...

  4. Codeforces H. Prime Gift(折半枚举二分)

    题目描述: Prime Gift time limit per test 3.5 seconds memory limit per test 256 megabytes input standard ...

  5. CF912E Prime Gift题解(搜索+二分答案)

    CF912E Prime Gift题解(搜索+二分答案) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1314956 洛谷题目链接 $     $ CF题目 ...

  6. CF912E Prime Gift 数学

    Opposite to Grisha's nice behavior, Oleg, though he has an entire year at his disposal, didn't manag ...

  7. 【Codeforces 912E】Prime Gift

    Codeforces 912 E 题意:给\(n\leq16\)个素数\(p_1..p_n\),求第\(k\)个所有质因数都在\(n\)个数中的数. 思路:折半搜索...我原来胡搞毛搞怎么也搞不动\( ...

  8. CF912E Prime Gift

    传送门 看到\(n\)只有16,可以把这些质数分成两半,然后预处理出这些数相乘得出的小于\(10^{18}\)的所有数,排个序,然后二分最终答案,再用两个指针从前往后和从后往前扫,进行\(two-po ...

  9. Prime Gift CodeForces - 912E (中途相遇)

    链接 大意:求素因子只含给定素数的第k大数 先二分答案转为判定x是第几大, 然后分两块合并即可, 按奇偶分块可以优化一下常数 #include <iostream> #include &l ...

随机推荐

  1. 漫谈Ajax在.Net中的使用

    引用地址:http://birdshover.cnblogs.com/archive/2006/07/03/441439.html AJAX出来的时间也不短了.虽然它在某些方面很受争议,但是瑕不掩瑜. ...

  2. java: 非法字符: \65279

    IDEA导入项目后,编译的时候出现Error:(1, 1) java: 非法字符: \65279: 修改:找到编译报错的文件,用Notepad++工具,以UTF-8无BOM格式编码保存,然后重新编译即 ...

  3. 线段树和zkw线段树

    作者作为一个蒟蒻,也是最近才自学了线段树,不对的地方欢迎大佬们评论,但是不要喷谢谢 好啦,我们就开始说说线段树吧 线段树是个支持区间操作和查询的东东,平时的话还是蛮实用的 下面以最基本的区间加以及查询 ...

  4. SAP 各模块常用的BAPI

    MM模块 1. BAPI_MATERIAL_SAVEDATA 创建物料主数据 注意参数EXTENSIONIN的使用,可以创建自定义字段 例如:WA_BAPI_TE_MARA-MATERIAL = IT ...

  5. Yii2.X 如何避开pathinfo不能处理中文名开头的bug

    /** * @return string original file base name */ public function getBaseName() { // https://github.co ...

  6. 以太坊国内节点大全(ropsten)

    admin.addPeer('enode://2d1e1f1242c3b54ea56046f74f15943f47ab410e3c0b82bffb501793ebb19e147f8f0e63d01c2 ...

  7. JZOJ 5791. 【NOIP2008模拟】阶乘

    5791. [NOIP2008模拟]阶乘 (File IO): input:factorial.in output:factorial.out Time Limits: 1000 ms  Memory ...

  8. 学习pytho第l六天 常用字符串用法

    name='my name is dream' print(name.capitalize())#首字母大写 print(name.count(‘’a‘’))#判断字符串里有多少个a print(na ...

  9. 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)

     版权声明:本文为博主原创文章,允许转载,但希望标注转载来源. https://blog.csdn.net/qq_38410730/article/details/80312357 IIC的基本介绍 ...

  10. [Poj3281]Dining(最大流)

    Description 有n头牛,f种食物,d种饮料,每头牛有nf种喜欢的食物,nd种喜欢的饮料,每种食物如果给一头牛吃了,那么另一个牛就不能吃这种食物了,饮料也同理,问最多有多少头牛可以吃到它喜欢的 ...