2018.09.14 codeforces364D(随机化算法)
传送门
根据国家集训队2014论文集中胡泽聪的随机化算法可以通过这道题。
对于每个数,它有12" role="presentation" style="position: relative;">1212的概率在最后的答案序列中,这样我们每次随机出序列中的一个数,然后看它的因子有没有符合条件的更新答案就行了。
代码;
#include<bits/stdc++.h>
#define ll long long
#define N 1000005
using namespace std;
int n,tot[N],sum[N];
ll x[N],ans,g[N],divv[N];
set<ll>s;
inline ll read(){
ll ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
inline ll gcd(ll a,ll b){while(b){ll t=a;a=b,b=t%a;}return a;}
inline ll max(ll a,ll b){return a>b?a:b;}
inline void calc(int pos){
int siz=0;
for(int i=1;i<=n;++i)g[i]=gcd(x[i],x[pos]);
for(int i=1;1ll*i*i<=x[pos];++i){
if(x[pos]%i)continue;
divv[++siz]=i;
if(1ll*i*i==x[pos])continue;
divv[++siz]=x[pos]/i;
}
sort(divv+1,divv+siz+1),siz=unique(divv+1,divv+siz+1)-divv-1;
for(int i=1;i<=siz;++i)tot[i]=sum[i]=0;
for(int i=1;i<=n;++i)++tot[lower_bound(divv+1,divv+siz+1,g[i])-divv];
for(int i=1;i<=siz;++i){
if(divv[i]<=ans)continue;
for(int j=i;j<=siz;++j)if(divv[j]%divv[i]==0)sum[i]+=tot[j];
}
for(int i=siz;i;--i){
if(divv[i]<=ans)break;
if(sum[i]*2>=n){ans=divv[i];break;}
}
}
int main(){
srand(time(NULL)),n=read(),ans=1;
for(int i=1;i<=n;++i)x[i]=read();
for(int i=1,dep=0;dep<=12&&i<=(n<<1);++dep,++i){
int pos=1ll*rand()*rand()%n+1;
if(s.count(x[pos])){--dep;continue;}
s.insert(x[pos]),calc(pos);
}
printf("%I64d",ans);
return 0;
}
2018.09.14 codeforces364D(随机化算法)的更多相关文章
- 2018.09.14 codechef Milestone(随机化算法)
传送门 由于存在不超过7条直线可以覆盖超过所有的点. 所以如果我们随机选点的话(每次随机两个) 那么得到的解恰好为最优解的概率是149" role="presentation&qu ...
- 2018.09.14 洛谷P3567 [POI2014]KUR-Couriers(主席树)
传送门 简单主席树啊. 但听说有随机算法可以秒掉%%%(本蒟蒻并不会) 直接维护值域内所有数的出现次数之和. 当这个值不大于区间总长度的一半时显然不存在合法的数. 这样在主席树上二分查值就行了. 代码 ...
- 2018.09.14 洛谷P3931 SAC E#1 - 一道难题 Tree(树形dp)
传送门 简单dp题. f[i]表示以i为根的子树被割掉的最小值. 那么有: f[i]=min(∑vf[v],dist(i,fa))" role="presentation" ...
- 2018.09.14 bzoj2982: combination(Lucas定理)
传送门 貌似就是lucas的板子题啊. 练一练手感觉挺舒服的^_^ 代码: #include<bits/stdc++.h> #define mod 10007 #define ll lon ...
- 牛客 Fruit Ninja 2018 ACM 上海大都会赛 (随机化算法)
题目链接:Fruit Ninja 比赛链接:2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 题目描述 Fruit Ninja is a juicy action game enjoyed ...
- Linux JDK 安装及卸载 http://www.cnblogs.com/benio/archive/2010/09/14/1825909.html
参考:http://www.cnblogs.com/benio/archive/2010/09/14/1825909.html
- POJ 矩阵相乘 (随机化算法-舍伍德(Sherwood))
周三的算法课,主要讲了随机化算法,介绍了拉斯维加斯算法,简单的理解了为什么要用随机化算法,随机化算法有什么好处. 在处理8皇后问题的时候,穷举法是最费时的,回朔比穷举好点,而当数据量比较大的时候,如1 ...
- 2016.09.14,英语,《Using English at Work》全书笔记
半个月时间,听完了ESLPod出品的<Using English at Work>,笔记和自己听的时候的备注列在下面.准备把每个语音里的快速阅读部分截取出来,放在手机里反复听. 下一阶段把 ...
- POJ3318--Matrix Multiplication 随机化算法
Description You are given three n × n matrices A, B and C. Does the equation A × B = C hold true? In ...
随机推荐
- jquery 隐藏 显示 动画效果
<!DOCTYPE html> <html> <head> <script src="/jquery/jquery-1.11.1.min.js&qu ...
- c++builder 代码模板 code templates
c++builder6.0 MENU:Tools>Editor Options>Code Insight>Code templates XE6 c++builder D:\Prog ...
- YII 使用modules下的css,js,img
用YII assets 1.assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件,但是我们又希望将module单独出来,所以需要使用发布,即将 ...
- 基于OpenGL编写一个简易的2D渲染框架-07 鼠标事件和键盘事件
这次为程序添加鼠标事件和键盘事件 当检测到鼠标事件和键盘事件的信息时,捕获其信息并将信息传送到需要信息的对象处理.为此,需要一个可以分派信息的对象,这个对象能够正确的把信息交到正确的对象. 实现思路: ...
- 前端-CSS-10-定位
<!-- 定位有三种: 1.相对定位 2.绝对定位 3.固定定位 这三种定位,每种定位都暗藏玄机,所以我们要一一单讲 position:relative; position:absolute; ...
- UI5-文档-4.8-Translatable Texts
在这一步中,我们将UI的文本移动到一个单独的资源文件中. 这样,他们都在一个中心位置,可以很容易地翻译成其他语言.这个国际化过程(简称i18n)是在SAPUI5中通过使用一种特殊的资源模型和标准的数据 ...
- Django之 Model Field Options
以下这些选项都是可选择的,非固定要求. 1)null,注意在CharField或者TextField里避免使用null,因为其存储的值是空字符串而不是NULL 2)blank该字段是否可以为空.如果为 ...
- webserive学习记录1-jdk自带webservice
最近在看webservice有视频,想年后找工作时增加点资本,视频终于看完了,自己又增加了些东西,现在就把视频中学到的和自己发现的东西总结一下. java jdk中自带一个轻量级的webservice ...
- delphi webbrowser 执行 js ---转
EmbeddedWB1.OleObject.document.parentWindow.execScript(memo1.Text, 'javascript');
- 回调(CallBack)
又名钩子函数(C语言里Hook) 不知道如何实现,可以写个回调, 相当于提供个钩子,让别人来挂东西,来实现. 其实就是用多态,实现了分离 . package cn.bjsxt.oop.callback ...