[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的更多相关文章

  1. 【数学 随机 技巧】cf364D. Ghd

    随机化选讲的例题 John Doe offered his sister Jane Doe find the gcd of some set of numbers a. Gcd is a positi ...

  2. CF364D Ghd(随机化)

    另一个集合\(s\)的\(ghd\)为\(max\{gcd(s')||s'|>=0.5|s|\}\) 给定序列\(a\),求\(ghd\) 随机化算法.因为\(|s'|\geq 0.5|S|\) ...

  3. ZJOI2019一轮游记

    Preface 期待已久的省选终于开始了233,关于之前的一些内容,在ZJOI2019一轮停课刷题记录都可以找到,这里不再赘述 ZJOI2019,Bless All Day -1 今天难得有休息,昨晚 ...

  4. 【题解】[Ghd]

    [题解]Ghd 一道概率非酋题? 题目很有意思,要我们选出大于\(\frac{n}{2}\)个数字使得他们的最大公约数最大. 那么我们若随便选择一个数字,他在答案的集合里的概率就大于\(0.5\)了. ...

  5. [Codeforces 364D]Ghd(随机算法+gcd)

    [Codeforces 364D]Ghd(随机算法) 题面 给出n个正整数,在其中选出n/2(向上取整)个数,要求这些数的最大公约数最大,求最大公约数的最大值 分析 每个数被选到的概率\(\geq \ ...

  6. ZJOI2019Round#1

    考的这么差二试基本不用去了 不想说什么了.就把这几天听课乱记的东西丢上来吧 这里是二试乱听课笔记ZJOI2019Round#2 ZJOI Round#1 Day1 M.<具体数学>选讲 罗 ...

  7. HTML5移动开发学习笔记之CSS3基础学习

    CSS回顾 在学CSS3之前首先巩固下CSS的基础知识. 1.CSS框模型 举例子: #box { width: 70px; margin: 10px; padding: 5px; } 这个代码将出现 ...

  8. windows7 64位下环境搭建scrapy爬虫框架

    适用于python 2.7 64位安装 一.操作系统:WIN7 64位 二.python版本:2.7 64位(scrapy目前不支持3.x) 不确定位数的,看图

  9. PHP面试题目搜集

    搜集这些题目是想在学习PHP方面知识有更感性的认识,单纯看书的话会很容易看后就忘记. 曾经看过数据结构.设计模式.HTTP等方面的书籍,但是基本看完后就是看完了,没有然后了,随着时间的推移,也就渐渐忘 ...

随机推荐

  1. jvm经典文章整理

    Java中JVM虚拟机详解 Java GC的那些事(上)(博主还有很多文章都很经典) CMS垃圾收集器介绍

  2. java ,用公司框架写的显示列表 Table控件

    <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org" lan ...

  3. Flsk-Bootstrap-2

    目录 Flsk-Bootstrap-2 结构 解压Bootstrap 制作基础模板 视图函数 初始文件 启动文件 浏览器 Flsk-Bootstrap-2 参考:Flask 项目中使用 bootstr ...

  4. 了解vue里的Runtime Only和Runtime+Compiler

    转自:了解vue里的Runtime Only和Runtime+Compiler 扩展文章:Vue 2.0如何仅使用Runtime-only Build构建项目? 可以看到有两种版本: Runtime ...

  5. django QuerySet

    Django对数据库的封装1——QuerySet 发布时间:2018-02-28 来源:网络 上传者:用户 关键字: manager 数据库 记录 影响 发表文章 摘要:   Django对数据库的操 ...

  6. RNN,写起来真的烦

    曾经,为了处理一些序列相关的数据,我稍微了解了一点递归网络 (RNN) 的东西.由于当时只会 tensorflow,就从官网上找了一些 tensorflow 相关的 demo,中间陆陆续续折腾了两个多 ...

  7. ffmpeg错误:Invalid UE golomb code

    解决方案在github https://github.com/FFmpeg/FFmpeg/commit/c51c08e0e70c186971385bdbb225f69edd4e3375 问题简要描述为 ...

  8. Spring Cloud微服务集成配置中心

    1. 搭建Spring Cloud Config配置中心(见上一篇博客) 2. 创建微服务项目bounter-simon-app,pom文件如下: <?xml version="1.0 ...

  9. juypter4.4.0 自动补全

    python -m pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user --skip ...

  10. servlet九大内置对象和监听器

    对象名称 类型 描述 作用域 request javax.servlet.ServletRequest 表示一次用户请求 Request response javax.servlet.SrvletRe ...