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 ...
随机推荐
- SparkConf源码解读
------------恢复内容开始------------ 1.主要功能:SparkConf是Spark的配置类,配置spark的application的应用程序,使用(key,value)来进行存 ...
- 可决系数R^2和方差膨胀因子VIF
然而很多时候,被筛选的特征在模型上线的预测效果并不理想,究其原因可能是由于特征筛选的偏差. 但还有一个显著的因素,就是选取特征之间之间可能存在高度的多重共线性,导致模型对测试集预测能力不佳. 为了在筛 ...
- heroinfo_set.all 函数
如果是 一对多 关系 即使用 heroinfo_set.all 此时关联字段类型通用,即上边的字段通用,但是需要添加many=True的参数heroinfo_set = serializers.Pr ...
- LeetCode--142--环形链表II(python)
给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...
- OC项目调用C++
CPPHello.hpp #ifndef CPPHello_hpp #define CPPHello_hpp #include <stdio.h> class CPPHello { pub ...
- 版本基线自动化之windows
1.背景: 目前项目维护周期过程中,制作调试版本和对外发布版本次数比较频繁,流程过于繁琐和随意,且打包制作人成为瓶颈,为了规范版本基线流程和实现全员自动化参与,拟定版本基线自动化方案. 2.目标: 版 ...
- 【MySQL】 知识点记录
0. 定位和排查问题的常用语句 查询 正在执行的事务(这个输出有事物状态表明是否等待锁):SELECT * FROM information_schema.INNODB_TRX 查看正在锁的事务:SE ...
- 《SQL Server 2012 T-SQL基础》读书笔记 - 3.联接查询
Chapter 3 Joins Cross Joins(交叉联接)就是返回两个表的笛卡尔积(m行的表cross join一个n行的表得到一个m * n行的结果),它有两种标准SQL语法,第一种: SE ...
- Linux内核调试方法总结之ltrace
ltrace [用途] 库文件调用跟踪器,Linux内核内建命令,用法类似strace [命令格式] [参数说明][详细说明参考man ltrace帮助文档] -D 打印调试信息 01-DEBUG_G ...
- ORA-00972
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') as 日期时间 from dual;select to_char(sysdate,'YY ...