另一个集合\(s\)的\(ghd\)为\(max\{gcd(s')||s'|>=0.5|s|\}\) 给定序列\(a\),求\(ghd\)

随机化算法。因为\(|s'|\geq 0.5|S|\),所以每个元素在\(s'\)中的概率为\(0.5\),我们可以钦定一个元素令它在\(s'\)中,那么算出它和其他所有元素的\(\gcd\),用\(map\)将所有的\(\gcd\)存起来,\(first\)存值,\(second\)存这个值的出现次数。然后从大到小枚举每一个\(\gcd\),并把比它大的那些且是它倍数的\(\gcd\)的出现次数加起来,如果某一次某个\(\gcd\)出现次数大于一半,那么该答案可行

为了避免TLE加几发剪枝,比如如果随机出来的元素比最优答案小就无视,如果两个数的\(\gcd\)比最优答案小无视,从大到小枚举元素只要有一个答案成立剩下的全都可以无视。然后\(rand\)个\(15\)次左右基本就能出答案了

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fi first
#define se second
#define IT map<ll,int>::iterator
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
ll read(){
R ll res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
char sr[1<<21],z[20];int C=-1,Z=0;
inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
void print(R int x){
if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;
while(z[++Z]=x%10+48,x/=10);
while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=1e6+5;
ll a[N],ans=1,x;int n,pos;map<ll,int>mp;
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
int main(){
// freopen("testdata.in","r",stdin);
srand(time(0));
n=read();
fp(i,1,n)a[i]=read();
fp(T,1,15){
pos=(1ll*rand()*RAND_MAX+rand())%n+1;
if(a[pos]<=ans)continue;
fp(i,1,n){
x=gcd(a[pos],a[i]);if(x<=ans)continue;
mp.count(x)?++mp[x]:mp[x]=1;
}if(mp.empty())continue;
IT it=mp.end();
do{
--it;if(it->fi<=ans)break;
int cnt=0;
for(IT itl=it;itl!=mp.end()&&(cnt<<1)<n;++itl)
if(itl->fi%it->fi==0)cnt+=itl->se;
if((cnt<<1)>=n){ans=it->fi;break;}
}while(it!=mp.begin());
map<ll,int>().swap(mp);
}printf("%I64d\n",ans);
return 0;
}

CF364D Ghd(随机化)的更多相关文章

  1. [CF364D]Ghd

    [CF364D]Ghd 题目大意: 有\(n(n\le10^6)\)个数\(A_{1\sim n}(A_i\le10^{12})\),从中选取\(\lceil\frac n2\rceil\)个数,使得 ...

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

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

  3. ZJOI2019一轮游记

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

  4. APP漏洞扫描用地址空间随机化

    APP漏洞扫描用地址空间随机化 前言 我们在前文<APP漏洞扫描器之本地拒绝服务检测详解>了解到阿里聚安全漏洞扫描器有一项静态分析加动态模糊测试的方法来检测的功能,并详细的介绍了它在针对本 ...

  5. rabin 素性检验 随机化算法

    #include <cstdio> #include <cstdlib> #include <ctime> typedef long long int LL; in ...

  6. [USACO2005][POJ2454]Jersey Politics(随机化)

    题目:http://poj.org/problem?id=2454 题意:给你3*k(k<=60)个数,你要将它们分成3个长度为k的序列,使得其中至少有两个序列的和大于k*500 分析:以为有高 ...

  7. POJ 矩阵相乘 (随机化算法-舍伍德(Sherwood))

    周三的算法课,主要讲了随机化算法,介绍了拉斯维加斯算法,简单的理解了为什么要用随机化算法,随机化算法有什么好处. 在处理8皇后问题的时候,穷举法是最费时的,回朔比穷举好点,而当数据量比较大的时候,如1 ...

  8. POJ3318--Matrix Multiplication 随机化算法

    Description You are given three n × n matrices A, B and C. Does the equation A × B = C hold true? In ...

  9. hdu 4739 Zhuge Liang's Mines 随机化

    Zhuge Liang's Mines Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.p ...

随机推荐

  1. Java基础知识查漏 一

    Java基础知识查漏 一 Jdk和jre Jdk是java程序设计师的开发工具,只要包含编译程序,jvm和java函数库 Jre中只有jvm和java函数库,没有编译程序的相关工具,适合只运行不撰写j ...

  2. 代码空间项目 -- cookie的基本使用

    cookie在日常开发b/s架构时候经常使用,可以在记住用户,方便自动登录,也可以记住用户的偏好并对应推送广告 下面说说开发时候的基本用法: 1.创建cookie//设置cookie,键值对形式Coo ...

  3. [usaco2008feb_gold]路面修整

      FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了N段,N个整数A_1 ...

  4. 修改mysql的root的密码

    首先用root账号登陆phpmyadmin,然后点击左侧的mysql,然后选择进入mysql数据库,输入以下命令:update user set password=password('123456') ...

  5. 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2

    from:https://blog.csdn.net/qq_14845119/article/details/73648100 Inception v1的网络,主要提出了Inceptionmodule ...

  6. MAC 地址解析

    windows cmd 命令行通过 ipconfig /all:查看本地的 ip 地址以及 mac地址: MAC 地址的前三个字节代表厂商: 00:50:56/00:0c:29:vmware 公司 c ...

  7. HDU2147 kiki's game (SG表找规律)

    Recently kiki has nothing to do. While she is bored, an idea appears in his mind, she just playes th ...

  8. TypeError: Unexpected keyword argument passed to optimizer: amsgrad原因及解决办法

    原因: AMSgrad只支持2017年12月11日后发行的keras版本 解决办法: pip install --upgrade keras

  9. 关于group_concat函数拼接字符超长的问题

    昨天测试的人火急火燎的找我,跟我说数据不对!说明情况后我去查看,原来是数据上有个子查询出来的字段没有完全展示 问题很明显,就是数据被截断了.下面贴上我写的查询 wyids_是正确的显示,通过它子查询出 ...

  10. 你忘记的java运算符

    当整数被0除时会得到一个无穷大,或者nan, 所以会抛出数据溢出的异常.