【BZOJ3837】[PA2013]Filary

题面

darkbzoj

题解

考虑到模数为\(2\)时答案至少为\(\frac n2\),这是我们答案的下界。

那么我们对于任意的一个数,它们答案集合中的就概率至少为\(\frac 12\)。

那么我们随机选出一个数,将这个数与其他数作差,那么将这些数分解质因数后出现次数最多的数的个数就是出现次数,而含有这个质因数的所有数的\(gcd\)就是这种情况。

因为值域\(\leq 10^7\),所以你把每个数最小的质因子筛出来就可以做到\(\log\)的分解质因数了,注意特判差为零的情况。

如果你不是太非随机十次左右就够了。

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <ctime>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
const int MAX_N = 1e5 + 5;
const int MAX_V = 1e7 + 5, MAX = 1e7;
int prime[700000], minp[MAX_V], num;
void sieve() {
for (int i = 2; i <= MAX; i++) {
if (!minp[i]) prime[++num] = i, minp[i] = i;
for (int j = 1; j <= num && i * prime[j] <= MAX; j++) {
minp[i * prime[j]] = prime[j];
if (i % prime[j] == 0) break;
}
}
}
int N, a[MAX_N], Cnt[MAX_V], Gcd[MAX_V];
pair<int, int> ans; int main () {
#ifndef ONLINE_JUDGE
freopen("cpp.in", "r", stdin);
#endif
srand(time(NULL));
sieve();
N = gi();
for (int i = 1; i <= N; i++) a[i] = gi();
for (int i = 1; i <= N; i++) if (a[i] & 1) ans.first++;
ans.first = max(ans.first, N - ans.first), ans.second = 2;
for (int T = 10; T--; ) {
int pos = rand() % N + 1, ALL = 0;
for (int i = 1; i <= N; i++) {
int dlt = abs(a[pos] - a[i]), tmp = dlt;
if (!dlt) ++ALL;
else {
int lst = 0;
while (tmp != 1) {
if (minp[tmp] != lst) {
Cnt[minp[tmp]]++;
Gcd[minp[tmp]] = __gcd(dlt, Gcd[minp[tmp]]);
}
lst = minp[tmp], tmp /= minp[tmp];
}
}
}
for (int i = 1; i <= N; i++) {
int dlt = abs(a[pos] - a[i]), tmp = dlt;
if (!dlt) continue;
else {
int lst = 0;
while (tmp != 1) {
if (minp[tmp] != lst) {
ans = max(ans, make_pair(ALL + Cnt[minp[tmp]], Gcd[minp[tmp]]));
Cnt[minp[tmp]] = 0;
Gcd[minp[tmp]] = 0;
}
lst = minp[tmp], tmp /= minp[tmp];
}
}
}
}
printf("%d %d\n", ans.first, ans.second);
return 0;
}

【BZOJ3837】[PA2013]Filary的更多相关文章

  1. 【BZOJ3837】[Pa2013]Filary 随机化神题

    [BZOJ3837][Pa2013]Filary Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等. 求出k的最大值,并求出此时 ...

  2. 【BZOJ3733】[Pa2013]Iloczyn (搜索)

    [BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream ...

  3. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  4. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  5. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  8. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  9. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

随机推荐

  1. 2018 ACM-ICPC徐州站网络赛 G题

    There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( xxx , yy ...

  2. pytorch tutorial 1

    这里用torch 做一个最简单的测试 目标就是我们用torch 建立一个一层的网络,然后拟合一组可以回归的数据 import torch from torch.autograd import Vari ...

  3. Dart面向对象编程(二)

    继承: person.dart: class Person{ String name; int age; String _birthday; bool get isAdult => age &g ...

  4. RESTful API 最佳实践(转)

    原文:http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html 阮一峰老师的文章,他的文章把难懂的东西讲的易懂 RE ...

  5. 初识AspNet Core中的标识Identity

    AspNet Core中的标识Identity,是用于Web应用程序的成员身份验证系统. 最方便的引入办法是在创建MVC或Pages的Web应用时,直接选择相应的身份验证系统.如图: 如果选择的是“个 ...

  6. python2.7写的图形密码生成器

    #coding:utf8import random,wxdef password(event): a = [chr(i) for i in range(97,123)] b = [chr(i) for ...

  7. Java 9新特性

    1.jdk 目录结构 JDK9 具体目录结构如下所示: bin: 该目录包含所有的命令. conf: 包含用户可以编辑的配置文件,例如以前位于 jre\lib 目录中的.properties 和 .p ...

  8. Oracle PLSQL游标、游标变量的使用

    参考文章:https://www.cnblogs.com/huyong/archive/2011/05/04/2036377.html 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实 ...

  9. 安装centos6.10时,安装完成重启报错error 15,file not found

    今天在一台老式联想服务器上安装centos6.10操作系统,安装完成,重启时,出现报错 error 15, file not found...... 在百度上搜索到进grub编辑,可还是无法解决问题, ...

  10. elastic date时区问题解决办法

    之前介绍filter date插件时就谈到时区问题,但是没有说明白.最近在使用range查询时间范围内的数据时出现了数据量不一致的情况.特地了解了下ELK Stack中关于时区的问题. 问题: 使用k ...