【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 ...
随机推荐
- R语言dai xie
R语言,Python长期招代写,作业量充足,需要一定英文能力,价格满意.有意者请留言联系,谢谢
- 【FPGA】Verilog实现交通信号灯
大二数字电路的课程设计中,有一份日常作业使用Xilinx FPGA实现简易交通信号灯,但很可惜当时时间有限,没能最终完成.正好在这一学期选修SOPC设计课程,同样采用了Xilinx FPGA,故打算重 ...
- 使用redis作为调度中心的celery时启动多个queue,报错Probably the key ('_kombu.binding.reply.celery.pidbox') has been removed from the Redis database
我今天在使用celery启动多个queue时遇到一个问题,当启动第二个queue是,第一个启动的queue日志报了下面一段错误 [2019-12-16 14:40:25,736: ERROR/Main ...
- Linux : Nginx相关
nginx安装参考链接: https://www.cnblogs.com/kaid/p/7640723.html 自定义编译目录: https://blog.csdn.net/ainuser/arti ...
- 关于PHP Fatal error: Invalid handle returned
我在使用thinkphp5使用pdo的方式连接sqlserver的时候出现如此错误 尝试了网上的多种方法 PHP Fatal error: Invalid handle returned 端口写在了 ...
- 1 Python命令行参数(脚本神器)
#!/usr/bin/env python3.7 # -*- coding:utf-8 -*- # Author: Lancer 2019-09-02 10:07:21 import sys,geto ...
- 阿里云开发工具包(SDK)
参考: 阿里云开发工具包(SDK)For Python Alibaba Cloud SDK for Go
- javascript format 字符串 函数
函数实现如下: function format(string) { var args = arguments; var pattern = new RegExp("%([1-" + ...
- Android 9.0网络权限适配
在做Android开发时,使用华为的p20和平板(均为Android 9.0)测试时,发现不能使用WIFI网络,一番郁闷纠结查找后 直接上方法: 在res文件夹下创建xml文件夹,在xml里面创建文件 ...
- 第一篇 Scrum 冲刺博客
一.各个成员在 Alpha 阶段认领的任务 姓名 Alpha 阶段认领的任务 林剑峰 用户信息页面:完成用户信息的上传 石竞贤 发布信息页面:完成用户图片上传云存储的功能,并且把发布信息上传到云数据库 ...