[CF364D]Ghd
[CF364D]Ghd
题目大意:
有\(n(n\le10^6)\)个数\(A_{1\sim n}(A_i\le10^{12})\),从中选取\(\lceil\frac n2\rceil\)个数,使得这些数的\(\gcd\)最大,求最大\(\gcd\)。
思路:
每个数有超过\(\frac12\)的概率被选取,因此可以随机一个数\(A_k\),强制要求它在被选取的集合内。对于所有\(A_i\),求\(\gcd(A_i,A_k)\),令\(B_i=\gcd(A_i,A_k)\)。从大到到小枚举每一个\(B_i\),统计有多少\(B_j\)是其倍数,若超过\(\lceil\frac n2\rceil\)则说明是一种可能的解,更新\(ans\)。
多随机几次正确率大大提高,然后剪剪枝就过了。
源代码:
#include<map>
#include<ctime>
#include<cstdio>
#include<cctype>
#include<vector>
#include<cstdlib>
#include<algorithm>
typedef long long int64;
inline int64 getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int64 x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=1e6+1;
int64 a[N];
std::map<int64,int> map;
int main() {
srand(time(NULL));
const int n=getint();
for(register int i=1;i<=n;i++) {
a[i]=getint();
}
int64 ans=0;
for(register int T=0;T<10;T++) {
const int k=1ll*rand()*rand()%n+1;
if(a[k]<=ans) continue;
map.clear();
for(register int i=1;i<=n;i++) {
if(a[i]<=ans) continue;
const int64 x=std::__gcd(a[i],a[k]);
if(x>ans) map[x]++;
}
std::vector<std::pair<int64,int>> v(map.begin(),map.end());
std::reverse(v.begin(),v.end());
for(register unsigned i=0;i<v.size();i++) {
if(v[i].first<ans) break;
int cnt=0;
for(register unsigned j=0;j<=i;j++) {
if(v[j].first%v[i].first==0) {
cnt+=v[j].second;
}
if(cnt>=(n+1)/2) break;
}
if(cnt>=(n+1)/2) ans=v[i].first;
}
}
printf("%I64d\n",ans);
return 0;
}
[CF364D]Ghd的更多相关文章
- 【数学 随机 技巧】cf364D. Ghd
随机化选讲的例题 John Doe offered his sister Jane Doe find the gcd of some set of numbers a. Gcd is a positi ...
- CF364D Ghd(随机化)
另一个集合\(s\)的\(ghd\)为\(max\{gcd(s')||s'|>=0.5|s|\}\) 给定序列\(a\),求\(ghd\) 随机化算法.因为\(|s'|\geq 0.5|S|\) ...
- ZJOI2019一轮游记
Preface 期待已久的省选终于开始了233,关于之前的一些内容,在ZJOI2019一轮停课刷题记录都可以找到,这里不再赘述 ZJOI2019,Bless All Day -1 今天难得有休息,昨晚 ...
- 【题解】[Ghd]
[题解]Ghd 一道概率非酋题? 题目很有意思,要我们选出大于\(\frac{n}{2}\)个数字使得他们的最大公约数最大. 那么我们若随便选择一个数字,他在答案的集合里的概率就大于\(0.5\)了. ...
- [Codeforces 364D]Ghd(随机算法+gcd)
[Codeforces 364D]Ghd(随机算法) 题面 给出n个正整数,在其中选出n/2(向上取整)个数,要求这些数的最大公约数最大,求最大公约数的最大值 分析 每个数被选到的概率\(\geq \ ...
- ZJOI2019Round#1
考的这么差二试基本不用去了 不想说什么了.就把这几天听课乱记的东西丢上来吧 这里是二试乱听课笔记ZJOI2019Round#2 ZJOI Round#1 Day1 M.<具体数学>选讲 罗 ...
- HTML5移动开发学习笔记之CSS3基础学习
CSS回顾 在学CSS3之前首先巩固下CSS的基础知识. 1.CSS框模型 举例子: #box { width: 70px; margin: 10px; padding: 5px; } 这个代码将出现 ...
- windows7 64位下环境搭建scrapy爬虫框架
适用于python 2.7 64位安装 一.操作系统:WIN7 64位 二.python版本:2.7 64位(scrapy目前不支持3.x) 不确定位数的,看图
- PHP面试题目搜集
搜集这些题目是想在学习PHP方面知识有更感性的认识,单纯看书的话会很容易看后就忘记. 曾经看过数据结构.设计模式.HTTP等方面的书籍,但是基本看完后就是看完了,没有然后了,随着时间的推移,也就渐渐忘 ...
随机推荐
- shell拼写检查,利用Linux字典
rename #find path -type f -name "*.mp3" -exec mv { } target_dir \; #mp3 file mv dir_file ...
- RAID 划分
RAID0:N块盘组成,逻辑容量为N块盘容量之和:RAID1:两块盘组成,逻辑容量为一块盘容量:RAID3:N+1块盘组成,逻辑容量为N块盘容量之和:RAID5:N块盘组成,逻辑容量为N-1块盘容量之 ...
- 2018-2019-2 20175306实验一《Java开发环境的熟悉》实验报告
2018-2019-2 20175306实验一<Java开发环境的熟悉>实验报告 一.实验内容及步骤 实验一 Java开发环境的熟悉-1 ·建立有自己学号的实验目录. ·通过vim Hel ...
- IIS部署项目
控制面板\所有控制面板项\管理工具-->Internet 信息服务(IIS)管理器 随便填个名称,项目的路径,选择一个新的端口.
- 15行python代码,帮你理解令牌桶算法
本文转载自: http://www.tuicool.com/articles/aEBNRnU 在网络中传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送,令牌桶算法 ...
- Git管理源代码
Git Git 是目前世界上最先进的分布式版本控制系统(没有之一) 作用 源代码管理 为什么要进行源代码管理? 方便多人协同开发 方便版本控制 Git单人本地仓库操作 安装git sudo apt-g ...
- 3D Slicer中文教程(八)—导出STL文件
一.STL文件简介 STL(立体平版印刷术的缩写)是由3D Systems创建的立体平版印刷CAD软件原生的文件格式STL有“标准三角语言”和“标准镶嵌语言”等几个事后回溯.这种文件格式是由许多其他软 ...
- 医学图像数据(二)——TCIA完整数据集下载方式
1. 构建下载环境 l TCIA数据集下载文件为.jnlp格式(JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序 ...
- 虚拟机上的centos7链接不上网络: activation of network connection failed
报错: 重启网络也不行: 解决: 1.打开网络配置文件: $vi /etc/sysconfig/network-scripts/ifcfg-ens33 (可以参照这里的描述,找到这个文件https: ...
- STM32F0使用LL库实现DMA方式AD采集
在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片.这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现.在本文中我们将介绍基于LL库的ADC的DM ...