题意 : 给你 N ( 1 ≤ N ≤ 16 ) 个质数,然后问你由这些质数作为因子的数 ( 此数不超 10^18 ) & ( 不一定需要其因子包含所给的所有质数 ) 的第 k 个是什么

分析 : 

由于各项的数据范围都太过于大,所以考虑从比较小的 N 入手

由于 N 比较小,所以可以先到是否能折半枚举,先将质数分成两个集合

然后分别处理出两个集合的所有不超过 10^18 次方的以集合内的数作为因子的数(DFS可以构造)

最后这些数的个数貌似是可以接受的,至于证明貌似出题人也在题解评论下面说可以暴力跑一下看看 ( 误

分成两个集合处理完之后将两个集合排序,接下来的工作就是上下界分别为 0 和 10^18 去二分答案

二分的判断函数需要做到==>给出一个数,然后判断在两个有序数组元素两两乘积里面排第几

这里可以用一个双指针技巧 O(N) 地做到

先从大到小枚举其中一个集合,那么 (当前二分数) / (第一集合的数) 这个商是越来越大的

而当满足 (第二集合的数) ≤ (当前二分数) / (第一集合的数) 那么说明有一个乘积在当前二分数的后面

由于不等式右边是逐渐增大的,所以只要我们从小到达枚举第二集合的数,即可下次不必从头开始判断

因此是 O(N) 的,可能需要看一下代码有助于理解。

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL INF = 1e18;
vector<];
];
LL K;

///DFS构造以集合内质数为因子的数,注意DFS的写法,可以做到不重复
void DFS(int L, int R, LL val, const int idx)
{
    vet[idx].push_back(val);
    for(int i=L; i<=R; i++)
        if(INF / (LL)num[i] >= val)
            DFS(i, R, val*(LL)num[i], idx);
}

LL Order(LL NUM)
{
    ;
    LL cnt = ;
    ].size()-; i>=; i--){///双指针技巧
        ].size() &&
              vet[][j] <= NUM / vet[][i])///不等式右边是逐渐变大的
                j++;
        cnt += j;
    }
    return cnt;
}

int main(void)
{
    scanf("%d", &N);
    ; i<=N; i++)
        scanf("%d", &num[i]);
    scanf("%I64d", &K);

    sort(num+, num++N);
    ,j=N; i<j; i+=,j-=)
        swap(num[i], num[j]);

    DFS(, min(, N), , );
    DFS(min(, N)+, N, , );

    sort(vet[].begin(), vet[].end());
    sort(vet[].begin(), vet[].end());

    LL L = , R = INF, mid, ans;
    while(L <= R){
        mid = L + ((R - L)>>);
        ;
        ;
    }

    );
}

最新文章

  1. SQL Server 即时文件初始化
  2. 搭建一套自己实用的.net架构(3)【ORM-Dapper+DapperExtensions】
  3. Power BI for Office 365(一)移动端应用
  4. callback 转换到 promise
  5. Ruby FFI 入门教程
  6. 第二节:AppDomain
  7. 如何用AndroidStudio导入github项目
  8. Java根据ip地址获取Mac地址,Java获取Mac地址
  9. Android自学学习资料
  10. CentOS6.4下搭建hadoop2.2(64bit)注意事项
  11. CF R303 div2 C. Woodcutters
  12. Json也可以这么使
  13. ecshop 后台添加新的设置
  14. iOS开发-APP测试基本流程
  15. PiggyMetrics windows 部署
  16. C++ : 内联函数和引用变量
  17. 《Python量化交易教程》第一部分新手入门 第1天:谁来给我讲讲Python?
  18. Alpha冲刺 - (3/10)
  19. JQuery 获取除某指定对象外的其他对象 :not() 与.not()
  20. How to disable SSL certificate checking with Spring RestTemplate?(使用resttemplate访问https时禁用证书检查)

热门文章

  1. git上传项目到github教程
  2. mysql——单表查询——分组查询——示例
  3. MSF魔鬼训练营-3.1.1信息收集-通过DNS和IP地址挖掘目标网络信息
  4. Django 前端通过json 取出后端数据
  5. 3种Redis分布式锁的对比
  6. C#获取局域网主机
  7. $id(id)函数
  8. Shiro单Realm加密
  9. Vue示例教程
  10. C Make a Square Educational Codeforces Round 42 (Rated for Div. 2) (暴力枚举,字符串匹配)