Prime Gift CodeForces - 912E (中途相遇)
2024-09-10 09:59:24
大意:求素因子只含给定素数的第k大数
先二分答案转为判定x是第几大, 然后分两块合并即可, 按奇偶分块可以优化一下常数
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define pb push_back using namespace std;
typedef long long ll; const int N = 2e5+10;
int a[N], b[N], f[N], n, m;
ll k;
vector<ll> s[2]; ll calc(ll x) {
ll ans = 0;
int now = 0;
PER(i,0,s[0].size()-1) {
while (now<s[1].size()&&s[1][now]<=x/s[0][i]) ++now;
ans += now;
}
return ans;
} void dfs(int d, int cur, ll now) {
s[d].pb(now);
REP(i,cur,*f) if (now<=1e18/f[i]) dfs(d,i,now*f[i]);
} int main() {
scanf("%d", &n);
REP(i,1,n) scanf("%d", a+i);
sort(a+1,a+1+n);
scanf("%lld", &k);
REP(i,1,n) if (i&1) f[++*f] = a[i];
dfs(0,1,1), *f = 0;
REP(i,1,n) if (i&1^1) f[++*f] = a[i];
dfs(1,1,1);
sort(s[0].begin(),s[0].end());
sort(s[1].begin(),s[1].end());
ll l = 1, r = 1e18, ans;
while (l<=r) {
int mid = (l+r)/2;
if (calc(mid)>=k) ans = mid, r = mid-1;
else l = mid+1;
}
printf("%lld\n", ans);
}
最新文章
- 安全防范:nginx下git引发的隐私泄露问题
- windows 用默认软件打开文档
- InnoDB O_DIRECT选项漫谈(一)【转】
- JS初学之-for套for遍历二维数组
- this,super关键字的使用
- 无法添加sql server ER图
- ASP.NET事务存储过程
- 2017-3-22 HTML 表单 、框架
- C语言之循环次数
- maven项目生成war包
- Scala编程入门---Map与Tuple
- 解决Android模拟器卡慢的问题
- 微信小程序 open-data更改样式 open-data 显示头像 圆形
- 封装cookie设置和获取的简易方法
- MapReduce shuffle过程剖析及调优
- oracle 根据一个时间段获取这个时间段内所有月份、天数、日期
- [No000016F]高并发下线程安全的单例模式(最全最经典)
- centos7.5安装golang
- Spring 注解原理(一)组件注册
- Jquery动态设置下拉框selected --(2018 08/12-08/26周总结)
热门文章
- Python的问题解决: IOError: [Errno 32] Broken pipe
- linux常用命令:at 命令
- java commons.lang3 ArrayUtils使用
- JUC原子类 1
- Linux中Postfix反病毒和垃圾邮件工具(十)
- EF 一个实体对象不能由多个 IEntityChangeTracker 实例引用 解决办法
- GreenOpenPaint的实现(五)矩形框
- 20145302张薇 《网络对抗》MSF应用基础
- Duilib 控件类html富文本绘制
- Python3基础 file open 打开txt文件并打印出全文