【BZOJ3837】[PA2013]Filary
【BZOJ3837】[PA2013]Filary
题面
题解
考虑到模数为\(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的更多相关文章
- 【BZOJ3837】[Pa2013]Filary 随机化神题
[BZOJ3837][Pa2013]Filary Description 给定n个正整数,从中挑出k个数,满足:存在某一个m(m>=2),使得这k个数模m的余数相等. 求出k的最大值,并求出此时 ...
- 【BZOJ3733】[Pa2013]Iloczyn (搜索)
[BZOJ3733][Pa2013]Iloczyn (搜索) 题面 BZOJ 题解 把约数筛出来之后,直接爆搜,再随便剪枝就过了. 最近一句话题解倾向比较严重 #include<iostream ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
随机推荐
- Vue.js 源码分析(五) 基础篇 方法 methods属性详解
methods中定义了Vue实例的方法,官网是这样介绍的: 例如:: <!DOCTYPE html> <html lang="en"> <head&g ...
- 基础知识---IEnumerable、ICollection、IList、IQueryable
一.定义 IEnumerable public interface IEnumerable<out T> : IEnumerable ICollection public interfac ...
- uni-app如何解决在for循环里调用异步请求获取数据顺序混乱问题?
总结/朱季谦 先前有一次做uni-app的js接口对接时,遇到过这样的情况,在for循环里,调用一个异步请求时,返回来的值顺序是乱的,因此,在以下的代码里,push到数组里的值,每次的顺序可能都是不一 ...
- c# 自定义验证登录(Authorize)
我们的项目本来是用azure的auth认证,是用过程中发现登录速度太慢了,所以还是自己搞一个吧,没想到搞起来挺简单的,不是用一个专门的认证服务器哈,就是一个简单的工具类. 验证是否登录的类 /// & ...
- ElasticSearch之安装及基本操作API
ElasticSearch 是目前非常流行的搜索引擎,对海量数据搜索是非常友好,并且在高并发场景下,也能发挥出稳定,快速特点.也是大数据和索搜服务的开发人员所极力追捧的中间件.虽然 ElasticSe ...
- 获取post传输参数
1.获取post参数可以用 传输参数为 a=aa&b=bb这种 public static SortedDictionary<string, string> GetRequestP ...
- 【IDE_IntelliJ IDEA】在Intellij IDEA中使用Debug
转载博客:在Intellij IDEA中使用Debug
- python调用函数设置超时机制
有时候需要给函数设置超时机制,以防止它卡住我们的程序,这里可以用python的signal模块,signal模块可以实现程序内部的信号处理. # coding:utf8 import time imp ...
- php静态化介绍
1.动态URL地址设置成静态形式http://state.com/index.php?c=play&a=index&id=16267 ------>http://state.co ...
- Game Engine Architecture 12
[Game Engine Architecture 12] 1.the field of physics is vast, and what most of today’s game engines ...