题目

Description

有N(2<=N<=15)个数A1,A2,….,An-1,An,如果在这N个数中,有且仅有一个数能整除m,那么整数m就是一个幸运数,你的任务就是在给定A1,A2,….,An-1,An的情况下,求出第k小的幸运数。

Input

第一行为一整数数N,K(2<=N<=15,1<=K<=2^31-1),意义如上述。
接下来一行有N个整数,A1,A2,….,An-1,An,这N个整数均不超过2^31-1。

Output

输出一行,仅包含一个整数ans,表示第K小的幸运数。答案保证不超过10^15。

Sample Input

输入1:

2 4

2 3

输入2:

2 100

125 32767

Sample Output

输出1:

8

输出2:

12500

Hint

对于50%的数据,N<=5,ANS<=100000
对于80%的数据,N<=10,ANS<=10^15
对于100%的数据,N<=15,ANS<=10^15

分析

观察数据范围:
对于50%的数据是很简单的,只需要暴力。

而要通过后面的数据就有点小困难。

题解

很容易想到最后的答案肯定是A[]中间的某个数乘上一个整数。

看到K怎么大枚举每一个数很显然是不现实的。

我们考虑一下,可不可以把问题转换一下,
看一下可不可以变成一个判断问题。

  • 看到K这么大,想到用二分。

现在问题就变成了求在区间[1..mid]有多少个符合条件的数。

  • 有关整数倍数的问题很容易想到容斥原理。

code

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <cmath>
#include <stdlib.h>
#include <math.h>
#define ll long long
using namespace std;ll a[20],l,r,ans,k,mid;
int n,m;ll gcd(ll x,ll y)
{if(x%y==0)return y;else return gcd(y,x%y);
}void bfs(int x,ll sum,int deep)
{if(sum>mid)return;if(deep%2)ans+=floor(mid/sum)*deep;else ans-=floor(mid/sum)*deep;for(int i=x+1;i<=n;i++)bfs(i,sum/gcd(sum,a[i])*a[i],deep+1);
}int main()
{scanf("%d%lld",&n,&k);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);l=1;r=1000000000000000;while(l<r){mid=(l+r)/2;ans=0;for(int i=1;i<=n;i++)bfs(i,a[i],1);if(ans<k)l=mid+1;else r=mid;}printf("%lld\n",l);
}

JZOJ1241. Number相关推荐

  1. input属性为number,maxlength不起作用的解决方案

    <input type="text" maxlength="11" /> 效果ok, 当 <input type="number&q ...

  2. ORA-19502: write error on file xxxxx, block number xxxx

    错误现象: 在ORACLE 10g下为表空间IGNITE_EGVSQL01增加数据文件时,报如下错误: SQL> ALTER TABLESPACE IGNITE_EGVSQL01      AD ...

  3. LeetCode刷题记录10——434. Number of Segments in a String(easy)

    LeetCode刷题记录10--434. Number of Segments in a String(easy) 目录 LeetCode刷题记录9--434. Number of Segments ...

  4. HDU 1711 Number Sequence(KMP算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...

  5. LeetCode 191 Number of 1 Bits

    LeetCode 191 Number of 1 Bits 解法一(较为传统都解法):使用将n不断右移,并与1想&得到1的个数:(也有使用除法/2的,明显除法的运行效率要低于位移) 时间复杂度 ...

  6. [BuildRelease]build number / id

    build number, 也称为build id, 在build release的流程中唯一标示一个build,也是正式的产品的product version 和file version后两位(Ma ...

  7. Oracle-ORA-01722 invalid number错误

    本来正常的,经过抓包才知道原来是数字型的无意中多了乱码! 本来是3276的居然多了后面一串 3276PuAnrSeU2zliU+IV/FHlnX2Xgia1au2xX2vMWtw http://www ...

  8. input输入框为number类型时,去掉上下小箭头

    input输入框type为number时,去掉上下小箭头,方式如下: <input type="number" ...><style>/* 在Chrome浏 ...

  9. 表单系列之input number总结

    各浏览器表现 <input type="number" /> chrome 除数字字符,只可输入e和. IE 除数字字符,其他字符均可输入,无报错 Firefox 除数 ...

最新文章

  1. 大数据系列修炼-Scala课程07
  2. Hibernate 小结
  3. WebSocket-java实现
  4. 判断浏览器是否为IE和版本
  5. 怎样选择宽带上网产品--解读上海电信政企宽带新套餐
  6. 10分钟实现RPC框架
  7. 网易交互设计师微专业C5 交互设计测试与评估
  8. APUE 第四章总结
  9. openproj centos安装及其输入中文变方块乱码解决
  10. mysql数据库去重
  11. 强化学习:Markov Decision Process (基于南大俞扬博士演讲的修改和补充)
  12. nginx 下配置禅道
  13. HDU5142 NPY and FFT BestCoder Round #22 1001
  14. lua报错:1: unfinished string near ‘<eof>‘
  15. [敏捷开发培训] Scrum 和 Kanban
  16. 高仿精仿微信客户端源码完整版
  17. python表情包多样化图形化聊天室_Python还有这功能:自动生成表情包,从此斗图无敌手!...
  18. 如何在电子邮件中推销自己(服务)
  19. Python机器学习基础篇二《监督学习》
  20. android 歌词同步 换行,HTML5音乐播放器同步显示歌词

热门文章

  1. 爱上开源之网络通信库boot4go-fastnet,简单而不乏高能
  2. Ubuntu下安装企业微信
  3. Bootstrap之Less
  4. PageInfo实现快速分页查询
  5. 是不是从Java培训班出来的人都被淘汰了?
  6. 拯救者14(i7-4720HQ)电池驱动过程记录
  7. UE4 AR 开发问题记录!
  8. Unity VS Unreal: 哪个更适合AR/VR开发?
  9. GYM100792K King‘s rout
  10. 《PyTorch深度学习实践》学习笔记 【2】