CF912E Prime Gift题解(搜索+二分答案)
CF912E Prime Gift题解(搜索+二分答案)
标签:题解
阅读体验:https://zybuluo.com/Junlier/note/1314956
先翻译一下题意
给你\(n\)个质数,让你求这\(n\)个质数能乘起来组成的第\(K\)大数(\(n\le 16,K\)好大八大)
思路
看到这个数据范围,很容易想到搜索对吧
但是又不能盲目地搜索,考虑\(meet-in-the-middle\)
搜出前\(8\)个和后\(8\)个能拼出的所有状态
很显然随便算一下是存的下来的(不确定数组开多大就开个\(vector\))
我们发现还是无法很快找到第\(K\)大的答案对吧
这种时候就应该想到二分答案\(+check\)来解决,那么我们对答案二分
问题就转化成了给你一个数和两个数列,让你找出它在这两个数列中每个数列任选两个乘起来的数中排名为多少
这个就不是很难了,那两个指针扫一遍就完事了。。。
如果不知道怎么扫的话可以考虑看一看代码(如果你看得懂的话)
Code(日常没注释)
#include<bits/stdc++.h>
#define il inline
#define rg register
#define ldb double
#define lst long long
#define rgt register int
#define N 20
#define pb push_back
using namespace std;
const lst Inf=1e18;
il int read()
{
int s=0,m=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')m=1;ch=getchar();}
while( isdigit(ch))s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
return m?-s:s;
}
lst n,K;
vector<lst> v[3];
lst p[N],Sz[3];
void Dfs(int rt,int now,lst ss)
{
if(now>n){v[rt].pb(ss),++Sz[rt];return;}
for(lst w=1;;w*=p[now])
{
Dfs(rt,now+2,ss*w);
if((1e18)/p[now]<w*ss)return;
//用除法是因为怕爆long long
}
}
int main()
{
n=read(),v[1].pb(0),v[2].pb(0);
for(rgt i=1;i<=n;++i)p[i]=read();
sort(&p[1],&p[n+1]),Dfs(1,1,1),Dfs(2,2,1);
sort(&v[1][1],&v[1][Sz[1]+1]);
sort(&v[2][1],&v[2][Sz[2]+1]);
lst le=1,ri=1e18,mid,tot,Ans;K=read();
while(le<=ri)
{
mid=(le+ri)>>1,tot=0;
for(rgt i=1,j=Sz[2];i<=Sz[1]&&j>=1;++i,tot+=j)
while(j&&mid/v[1][i]<v[2][j])--j;//用除法是因为怕爆long long
if(tot<K)le=mid+1;
else Ans=mid,ri=mid-1;
}return printf("%lld\n",Ans),0;
}
CF912E Prime Gift题解(搜索+二分答案)的更多相关文章
- $CF912E\ Prime\ Gift$ 二分+搜索
正解:二分+搜索 解题报告: 传送门$QwQ$ 因为翻译真的很$umm$所以还是写下题目大意$QwQ$,就说给定一个大小为$n$的素数集合,求出分解后只含这些质数因子的第$K$小整数 考虑先把质数分两 ...
- 【题解】 [HEOI2016]排序题解 (二分答案,线段树)
题目描述 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行 ...
- CF912E Prime Gift 数学
Opposite to Grisha's nice behavior, Oleg, though he has an entire year at his disposal, didn't manag ...
- [NOIP2012提高]借教室 题解(二分答案+差分)
[NOIP2012提高&洛谷P1083]借教室 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室 ...
- [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)
[CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...
- [NOIP2015提高&洛谷P2678]跳石头 题解(二分答案)
[NOIP2015提高&洛谷P2678]跳石头 Description 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之 ...
- [NOIP提高&洛谷P1024]一元三次方程求解 题解(二分答案)
[NOIP提高&洛谷P1024]一元三次方程求解 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约 ...
- 3月28日考试 题解(二分答案+树形DP+数学(高精))
前言:考试挂了很多分,难受…… --------------------- T1:防御 题意简述:给一条长度为$n$的序列,第$i$个数的值为$a[i]$.现让你将序列分成$m$段,且让和最小的一段尽 ...
- CF912E Prime Gift
传送门 看到\(n\)只有16,可以把这些质数分成两半,然后预处理出这些数相乘得出的小于\(10^{18}\)的所有数,排个序,然后二分最终答案,再用两个指针从前往后和从后往前扫,进行\(two-po ...
随机推荐
- 路径path知识点
1. 获取当前文件的路径 test.py os.path.abspath(path) # 返回当前文件运行的绝对路径 print("程序的绝对路径是",os.path.abspat ...
- Python内置函数之filter map reduce
Python内置函数之filter map reduce 2013-06-04 Posted by yeho Python内置了一些非常有趣.有用的函数,如:filter.map.reduce,都是对 ...
- axios中put和patch的区别(都是update , put是需要提交整个对象资源,patch是可以修改局部)
patch方法用来更新局部资源,这句话我们该如何理解? 假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段.可你的编辑功能因为需求,在某个特别的 ...
- mongodb replica set搭建
1/安装mongodb 配置repo: [mongodb-org-3.4]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/red ...
- Intraweb IIS发布,数据连接问题
日前,用IW做了小东西,开始用单独的执行程序发布,一切都没有什么问题,但是发布到正式环境中,用windows IIS发布,怎么也获取不了程序所在的物理路径,而后看了万一的博客,试了一下程序能正常运行, ...
- 虚拟机安装Windows系统,再安装orcale
本文出自:http://www.cnblogs.com/2186009311CFF/p/8724441.html 1.创建新虚拟机 2.选择自定义 3.选择workstation 5.x(据安装的系统 ...
- python 获取list某个元素下标
index() 函数用于从列表中找出某个值第一个匹配项的索引位置. list.index(x, start, end) #start end 指示搜索的起始和结尾位置,缺省为整个数组 x-- 查找的对 ...
- php XDebug配置和使用
已本机php 5.5nts为例,php.ini配置如下: [XDebug] xdebug.profiler_append = 0 xdebug.profiler_enable = 1 xdebug.p ...
- Linux下JDK1.7升级1.8版本
先下载 jdk-8u45-linux-x64.rpm 然后上传到 /usr/local/src 去.当然其他目录也可以.这里是默认位置 给所有用户添加可执行权限 #chmod +x jdk-8u4 ...
- SQL读取表中不重复字段
通关关键字 distinct 将AlbumName字段中所以不重复的内容读出来.