Prime Gift(prime)
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。
来源
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)的更多相关文章
- Codeforces 912E - Prime Gift
912E - Prime Gift 思路: 折半枚举+二分check 将素数分成两个集合(最好按奇偶位置来,保证两集合个数相近),这样每个集合枚举出来的小于1e18的积个数小于1e6. 然后二分答案, ...
- Codeforces 912 E.Prime Gift (折半枚举、二分)
题目链接:Prime Gift 题意: 给出了n(1<=n<=16)个互不相同的质数pi(2<=pi<=100),现在要求第k大个约数全在所给质数集的数.(保证这个数不超过1e ...
- Codeforces 912E Prime Gift(预处理 + 双指针 + 二分答案)
题目链接 Prime Gift 题意 给定一个素数集合,求第k小的数,满足这个数的所有质因子集合为给定的集合的子集. 保证答案不超过$10^{18}$ 考虑二分答案. 根据折半的思想,首先我们把这个 ...
- Codeforces H. Prime Gift(折半枚举二分)
题目描述: Prime Gift time limit per test 3.5 seconds memory limit per test 256 megabytes input standard ...
- CF912E Prime Gift题解(搜索+二分答案)
CF912E Prime Gift题解(搜索+二分答案) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1314956 洛谷题目链接 $ $ CF题目 ...
- CF912E Prime Gift 数学
Opposite to Grisha's nice behavior, Oleg, though he has an entire year at his disposal, didn't manag ...
- 【Codeforces 912E】Prime Gift
Codeforces 912 E 题意:给\(n\leq16\)个素数\(p_1..p_n\),求第\(k\)个所有质因数都在\(n\)个数中的数. 思路:折半搜索...我原来胡搞毛搞怎么也搞不动\( ...
- CF912E Prime Gift
传送门 看到\(n\)只有16,可以把这些质数分成两半,然后预处理出这些数相乘得出的小于\(10^{18}\)的所有数,排个序,然后二分最终答案,再用两个指针从前往后和从后往前扫,进行\(two-po ...
- Prime Gift CodeForces - 912E (中途相遇)
链接 大意:求素因子只含给定素数的第k大数 先二分答案转为判定x是第几大, 然后分两块合并即可, 按奇偶分块可以优化一下常数 #include <iostream> #include &l ...
随机推荐
- 【转】CentOS 7.0 安装Redis 3.2.1详细过程和使用常见问题
http://www.linuxidc.com/Linux/2016-09/135071.htm 环境:CentOS 7.0 Redis 3.2.1 Redis的安装与启动 这里我把Redis放在/h ...
- VC-基础-WebBrowser控件中弹出新网页窗口
用webbrowser控件浏览网页时,常弹出新的网页窗口,若不做任何控制的话,会在默认浏览器(一般是IE)中打开,这样就在新的窗口打开了,原程序就很难控制了,且存在webbrowser控件和IE的se ...
- 管理员必备的几个Linux系统监控工具
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性 ...
- react的redux中间件
redux 的中间件(对dispatch功能的拦截和增强,一般不用自己写,有插件) dispath是一个方法,可以自行中间拦截更改: store.dispatch = function(action) ...
- day03_基本数据类型基本运算
1.什么是数据类型 变量值才是我们存储的数据,所以数据类指的就是变量值的不同种类 2.为何数据要分类型? 变量值是用来保存现实世界中的状态的,那么针对不同的状态就应该用不同类型的数据去表示 3.如何用 ...
- python各种操作列表的方法及案例
一.循环的使用方法 names = ["张真","刘德华","哈林","谢霆锋","张柏芝"] fo ...
- Leetcode 872. 叶子相似的树
题目链接 https://leetcode-cn.com/problems/leaf-similar-trees/description/ 题目描述 请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到 ...
- 【Directory】文件操作(初识文件操作二)
上篇我们说了关于文件的创建删除更改可以通过File这个类来完成.对于目录的操作其实File类也可以完成创建删除等相关的操作.用法跟文件的方法大致相同. 那么下面就一起来看一下关于目录相关的用法. 一, ...
- TCP/IP网络编程之进程间通信
进程间通信基本概念 进程间通信意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应提供两个进程可以同时访问的内存空间.但我们知道,进程具有完全独立的内存结构,就连通过fork函数创建的子进程 ...
- django 连接MYSQL时,数据迁移时报:django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE9\\x97\\xAE\\xE9\\xA2\\x98' for column 'name' at row 5")
django 连接MYSQL时,数据迁移时报:django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE9\\x ...