CF364D Ghd(随机化)
另一个集合\(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(随机化)的更多相关文章
- [CF364D]Ghd
[CF364D]Ghd 题目大意: 有\(n(n\le10^6)\)个数\(A_{1\sim n}(A_i\le10^{12})\),从中选取\(\lceil\frac n2\rceil\)个数,使得 ...
- 【数学 随机 技巧】cf364D. Ghd
随机化选讲的例题 John Doe offered his sister Jane Doe find the gcd of some set of numbers a. Gcd is a positi ...
- ZJOI2019一轮游记
Preface 期待已久的省选终于开始了233,关于之前的一些内容,在ZJOI2019一轮停课刷题记录都可以找到,这里不再赘述 ZJOI2019,Bless All Day -1 今天难得有休息,昨晚 ...
- APP漏洞扫描用地址空间随机化
APP漏洞扫描用地址空间随机化 前言 我们在前文<APP漏洞扫描器之本地拒绝服务检测详解>了解到阿里聚安全漏洞扫描器有一项静态分析加动态模糊测试的方法来检测的功能,并详细的介绍了它在针对本 ...
- rabin 素性检验 随机化算法
#include <cstdio> #include <cstdlib> #include <ctime> typedef long long int LL; in ...
- [USACO2005][POJ2454]Jersey Politics(随机化)
题目:http://poj.org/problem?id=2454 题意:给你3*k(k<=60)个数,你要将它们分成3个长度为k的序列,使得其中至少有两个序列的和大于k*500 分析:以为有高 ...
- POJ 矩阵相乘 (随机化算法-舍伍德(Sherwood))
周三的算法课,主要讲了随机化算法,介绍了拉斯维加斯算法,简单的理解了为什么要用随机化算法,随机化算法有什么好处. 在处理8皇后问题的时候,穷举法是最费时的,回朔比穷举好点,而当数据量比较大的时候,如1 ...
- POJ3318--Matrix Multiplication 随机化算法
Description You are given three n × n matrices A, B and C. Does the equation A × B = C hold true? In ...
- 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 ...
随机推荐
- Android自己定义控件--下拉刷新的实现
我们在使用ListView的时候.非常多情况下须要用到下拉刷新的功能.为了了解下拉刷新的底层实现原理,我採用自己定义ListView控件的方式来实现效果. 实现的基本原理是:自己定义ListView, ...
- 解决Windows x64bit环境下无法使用PLSQL Developer连接到Oracle DB中的问题
本文是原创文章,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/46416455 解决Windows x64bit环境下无法使用PLSQ ...
- js 单例模式的实现方式----闭包和构造函数内部判断
闭包: var singleton = function( fn ){ var result; return function(){ return result || ( result = fn .a ...
- 阿里妈妈-RAP项目的实践(3)
接下来,我们就把我们的代码运用到项目中,因为我们前台是有jquery,后台管理系统是用angularjs mock在这两种的调用方式不一样,所以我就用nginx的proxy_pass 来代理 我在项目 ...
- LVS集群的负载调度
LVS集群的负载调度 章文嵩 (wensong@linux-vs.org) 转自LVS官方资料 2002 年 5 月 本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法. ...
- java中如何创建带路径的文件
请教各位大侠了,java中如何创建带路径的文件,说明下 这个路径不存在 ------回答--------- ------其他回答(2分)--------- Java code File f = new ...
- Android Weekly Notes Issue #240
Android Weekly Issue #240 January 15th, 2017 Android Weekly Issue #240 Hello, 各位亲, 从本篇笔记开始, 以后并不包含An ...
- android SDK中添加自定义api【转】
本文转载自:http://blog.csdn.net/a624731186/article/details/23548409 本文的思路: android APP调用自定义java API,自定义ja ...
- Chkrootkit安装配置教程 – Linux后门入侵检测
rootkit从浅显的层面来讲即一种具有自我隐蔽性的后门程序,它往往被入侵者作为一种入侵工具.通过rootkit,入侵者可以偷偷控制被入侵的电脑,因此危害巨大.chkrootkit是一个Linux系统 ...
- <十三>UML核心视图静态视图之业务用例图
一:uml的核心视图 --->如果说UML是一门语言,上一章学习的参与者等元素是uml的基本词汇,那么视图就是语法.uml通过视图将基元素组织在一起,形成有意义的句子. --->uml可视 ...