Codeforces Round #456 (Div. 2) 912E E. Prime Gift
题
OvO http://codeforces.com/contest/912/problem/E
解
首先把这个数字拆成个子集,各自生成所有大小1e18及以下的积
对于最坏情况,即如下数据
- 16
- 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53
把她肢解成
2 3 5 7 11 13 和 17 19 23 29 31 37 41 43 47 53 两个集合
这两个集合生成的1e18及以下的积的数量分别为 958460个 和 505756个,并不大,而且两个集合中的积必定是两两不相等的(除了)。
记两个集合大小的和为 |S|
两个集合生成的积各自排一下序
然后二分答案,对于每个答案 u,可以 O(|S|) 得到他是第几大。
具体做法是枚举从到小枚举第一个集合的积 t1,然后计算一下第二个集合的积中有多少积和 t1 相乘小于等于 u,
由于是从大到小枚举的,所以 t1 必然递增,所以第二个集合的积中符合条件的积的数量也必然是递增的,所以只要扫一遍就行。
然后要注意的是直接用 long long 来进行计算比较好,double的精度貌似不太够
(参考自这里->http://codeforces.com/contest/912/submission/33938779)
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- #include <vector>
- #include <queue>
- #include <vector>
- using namespace std;
- typedef long long ll;
- const ll INF=1e18;
- const int N=24;
- vector<ll> seg[2];
- int p[N],n;
- ll ansid;
- void dfs(int li,int ri,ll val,int id)
- {
- seg[id].push_back(val);
- for(int i=li;i<=ri;i++)
- if(INF/p[i]>=val)
- dfs(i,ri,val*p[i],id);
- }
- ll cnt(ll num)
- {
- int j=0;
- ll ret=0;
- for(int i=seg[0].size()-1;i>=0;i--)
- {
- while(j<seg[1].size() && seg[1][j]<=num/seg[0][i])
- j++;
- ret+=j;
- }
- return ret;
- }
- void solve()
- {
- int i,j;
- dfs(1,min(6,n),1,0);
- dfs(min(6,n)+1,n,1,1);
- sort(seg[0].begin(),seg[0].end());
- sort(seg[1].begin(),seg[1].end());
- // cout<<seg[0].size()<<' '<<seg[1].size()<<endl;
- ll li=0,ri=INF,mid;
- while(li<ri-1)
- {
- mid=(li+ri)>>1;
- if(cnt(mid)>=ansid)
- ri=mid;
- else li=mid;
- }
- printf("%I64d\n",ri);
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- scanf("%d",&p[i]);
- scanf("%I64d",&ansid);
- solve();
- return 0;
- }
- /*
- 16
- 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53
- 2
- */
Codeforces Round #456 (Div. 2) 912E E. Prime Gift的更多相关文章
- Codeforces Round #456 (Div. 2)
Codeforces Round #456 (Div. 2) A. Tricky Alchemy 题目描述:要制作三种球:黄.绿.蓝,一个黄球需要两个黄色水晶,一个绿球需要一个黄色水晶和一个蓝色水晶, ...
- Codeforces Round #456 (Div. 2) B. New Year's Eve
传送门:http://codeforces.com/contest/912/problem/B B. New Year's Eve time limit per test1 second memory ...
- Codeforces Round #456 (Div. 2) A. Tricky Alchemy
传送门:http://codeforces.com/contest/912/problem/A A. Tricky Alchemy time limit per test1 second memory ...
- Codeforces Round #456 (Div. 2) 912D D. Fishes
题: OvO http://codeforces.com/contest/912/problem/D 解: 枚举每一条鱼,每放一条鱼,必然放到最优的位置,而最优位置即使钓上的概率最大的位置,即最多的r ...
- Codeforces Round #456 (Div. 2) B. New Year's Eve
B. New Year's Eve time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- 【Codeforces Round #456 (Div. 2) A】Tricky Alchemy
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 统计需要的个数. 不够了,就买. [代码] #include <bits/stdc++.h> #define ll lo ...
- 【Codeforces Round #456 (Div. 2) B】New Year's Eve
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然10000..取到之后 再取一个01111..就能异或成最大的数字了. [代码] /* 1.Shoud it use long ...
- 【Codeforces Round #456 (Div. 2) C】Perun, Ult!
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] set1 < pair < int,int > > set1;记录关键点->某个人怪物永远打不死了,第 ...
- Codeforces Round #456 (Div. 2) B题
B. New Year's Evetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputout ...
随机推荐
- MySQL函数和过程(三)
--加密32位字符select md5('123456') --获取字符串的长度(一个中文三个长度)select LENGTH('呵呵') --获取字符串字符个数select CHAR_LENGTH( ...
- (十八)JDBC获取存储过程和主键
目录 获取数据库自动生成的主键: JDBC调用存储过程 获取数据库自动生成的主键: update 更新操作以后,如果需要用到结果集,可以通过 PreparedStatement.getResultSe ...
- K60工程
使用arm-none-eabi-objcopy工具将elf文件转换为hex文件 "D:/ELF/arm-none-eabi-objcopy.exe" -O ihex "D ...
- 用python库openpyxl操作excel,从源excel表中提取信息复制到目标excel表中
现代生活中,我们很难不与excel表打交道,excel表有着易学易用的优点,只是当表中数据量很大,我们又需要从其他表册中复制粘贴一些数据(比如身份证号)的时候,我们会越来越倦怠,毕竟我们不是机器,没法 ...
- php分页思路
<?php class page{ public $nowPage=1; public $perPage=10; public $showPage=10; public $totalPage; ...
- easyUI datagrid 刷新取消加载信息 自动刷新闪屏问题
<style type="text/css"> /*-- 消除grid屏闪问题 --//*/ .datagrid-mask { opacity: 0; filter: ...
- 嵌入式linux第一阶段笔记
1.虚拟网络编辑器(vm):三种模式:(VMnet0)桥接模式(vm和windows公用同个网络(同个物理端口)),(VMnet1)仅主机模式,(VMnet8)NAT模式(vm连接一个虚拟的路由(WA ...
- 使用Visual Studio2019 开启Openmp的方法
调试-->属性-->C/C++-->所有选项-->Openmp支持改为 是(可以使用下拉菜单) 严重性 代码 说明 项目 文件 行 禁止显示状态 禁止显示状态 错误 C2338 ...
- MQTT协议探究(二)
1 回顾与本次目标 1.1 回顾 MQTT控制报文的基本格式 WireShark进行抓包分析了报文 报文分析: CONNECT--连接服务器 CONNACK--确认连接请求 PINGREQ--心跳请求 ...
- 安装HAXM报错:failed to configure driver unknown error. failed to open driver 并提示数字签证不可用
1.安装微软补丁:https://www.microsoft.com/en-us/download/confirmation.aspx?id=46148 2.重启后重新安装HAXM