[ABC272G] Yet Another mod M
Problem Statement
You are given a sequence $A=(A_1,A_2,\dots,A_N)$ of length $N$ consisting of positive integers, where the elements of $A$ are distinct.
You will choose a positive integer $M$ between $3$ and $10^9$ (inclusive) to perform the following operation once:
- For each integer $i$ such that $1 \le i \le N$, replace $A_i$ with $A_i \bmod M$.
Can you choose an $M$ so that $A$ satisfies the following condition after the operation? If you can, find such an $M$.
- There exists an integer $x$ such that $x$ is the majority in $A$.
Here, an integer $x$ is said to be the majority in $A$ if the number of integers $i$ such that $A_i = x$ is greater than the number of integers $i$ such that $A_i \neq x$.
Constraints
- $3 \le N \le 5000$
- $1 \le A_i \le 10^9$
- The elements of $A$ are distinct.
- All values in the input are integers.
Input
The input is given from Standard Input in the following format:
$N$
$A_1$ $A_2$ $\dots$ $A_N$
Output
If there exists an $M$ that satisfies the condition, print such an $M$. Otherwise, print $-1$.
Sample Input 1
5
3 17 8 14 10
Sample Output 1
7
If you let $M=7$ to perform the operation, you will have $A=(3,3,1,0,3)$, where $3$ is the majority in $A$, so $M=7$ satisfies the condition.
Sample Input 2
10
822848257 553915718 220834133 692082894 567771297 176423255 25919724 849988238 85134228 235637759
Sample Output 2
37
Sample Input 3
10
1 2 3 4 5 6 7 8 9 10
Sample Output 3
-1
首先如果现在就给出一些模某个数同余的数,怎么知道模哪个数同余?设这些数是 \(a_1,a_2\cdots a_k\),那么两个同余的数一减,一定模的那个数的倍数。所以这些数模 \(\gcd(|a_2-a_1|,|a_3-a_2|,\cdots ,|a_k-a_{k-1}|)\) 一定是同余的,看这个数是否大于2即可。
第二个引理,如果某个数合法,那么他的因数一定合法。这应该是易得的。所以后面的讨论中,我们可以只讨论质数(4也要特殊讨论,由于2被排除在范围外)。
首先对于所有小于等于 \(\sqrt{W}\)(\(W\) 是值域) 的质数,我们可以先跑一次。这里的复杂度不会超过 \(O(\frac{n\sqrt{W}}{\log n})\)。
对于大于 \(\sqrt{W}\) 的质数,应该注意到,如果他合法,那么他选出来的子集中每两个数之差一定都是他的因数。由于选的时候选了超过 \(\lceil\frac n2\rceil\) 个数,所以一定选了原序列中的相邻两个数(除非 \(n\) 为奇数然后跳着选,这个特判一下就好了)。大于 \(\sqrt{W}\) 的质数,在某个数中的所有质因数中至多出现一个。枚举序列的相邻两个数,找到他们的差中那个大于 \(\sqrt{W}\) 的质因数(如果存在的话),然后跑一次看是否合法。分解质因数这里由于我们已经筛出来了小于等于 \(\sqrt{W}\) 的所有质因数,所以可以降到 \(O(\frac{\sqrt{W}}{\log n})\)。注意这里取模加计数要用到哈希表。总复杂度 \(O(\frac{n\sqrt{W}}{\log n})\)
#include<bits/stdc++.h>
using namespace std;
const int N=5005,M=40000,P=5521;
int n,a[N],mx,pri[M],c,p[M],m;
struct hashmap{
int cnt[P],hd[P],idx,nxt[P],val[P];
int insert(int x)
{
if(!hd[x%P])
{
hd[x%P]=++idx;
val[idx]=x;
return ++cnt[idx];
}
for(int i=hd[x%P];i;i=nxt[i])
{
if(val[i]==x)
{
cnt[i]++;
return cnt[i];
}
else if(!nxt[i])
{
nxt[i]=++idx;
val[idx]=x;
cnt[idx]=1;
return 1;
}
}
}
void clear()
{
memset(hd,idx=0,sizeof(hd));
memset(nxt,0,sizeof(nxt));
memset(cnt,0,sizeof(cnt));
}
}cnt;
void check(int i)
{
cnt.clear();
mx=0;
for(int j=1;j<=n;j++)
{
int k=cnt.insert(a[j]%i);
// printf("%d ",a[j]%i);
if(k>mx)
mx=k;
}
// printf("%d\n",mx);
if(mx>n/2)
{
printf("%d\n",i);
exit(0);
}
}
void maxdiv(int x)
{
for(int i=1;i<=m;i++)
while(x%p[i]==0)
x/=p[i];
if(x!=1)
check(x);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
sort(a+1,a+n+1);
for(int i=2;i<=32000;i++)
{
if(!pri[i])
{
p[++m]=i;
for(int j=i;j*i<=32000;j++)
pri[j*i]=1;
}
}
check(4);
for(int i=3;i<=32000;i++)
if(!pri[i])
check(i);
maxdiv(a[3]-a[1]);
for(int i=1;i<=n;i++)
maxdiv(a[i+1]-a[i]);
puts("-1");
}
[ABC272G] Yet Another mod M的更多相关文章
- 函数mod(a,m)
Matlab中的函数mod(a,m)的作用: 取余数 例如: mod(25,5)=0; mod(25,10)=5; 仅此.
- ORACLE 数据库 MOD 函数用法
1.求2和1的余数. Select mod(2,1) from dual: 2能被1整除所以余数为0. 2.MOD(x,y)返回X除以Y的余数.如果Y是0,则返回X的值. Select mod(2,0 ...
- 黑科技项目:英雄无敌III Mod <<Fallen Angel>>介绍
英雄无敌三简介(Heroes of Might and Magic III) 英3是1999年由New World Computing在Windows平台上开发的回合制策略魔幻游戏,其出版商是3DO. ...
- [日常训练]mod
Description 给定$p_1,p_2,-,p_n,b_1,b_2,...,b_m$, 求满足$x\;mod\;p_1\;\equiv\;a_1,x\;mod\;p_2\;\equiv\;a_2 ...
- Apache Mod/Filter Development
catalog . 引言 . windows下开发apache模块 . mod进阶: 接收客户端数据的 echo 模块 . mod进阶: 可配置的 echo 模块 . mod进阶: 过滤器 0. 引言 ...
- FZU 1752 A^B mod C(快速加、快速幂)
题目链接: 传送门 A^B mod C Time Limit: 1000MS Memory Limit: 65536K 思路 快速加和快速幂同时运用,在快速加的时候由于取模耗费不少时间TLE了 ...
- HDOJ 4389 X mod f(x)
数位DP........ X mod f(x) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- hdu.1104.Remainder(mod && ‘%’ 的区别 && 数论(k*m))
Remainder Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 对于一个负数mod正数
鸟神说.. a/b靠零取整 然后呢..a%b定义成a-(a/b)*b c语言就是这么算的... 那么python2.6是怎么算的呢 如果最后你取模想得到一个正数.. 那么在上述取模定义不变的情况下 p ...
- 51Nod 1046 A^B Mod C Label:快速幂
给出3个正整数A B C,求A^B Mod C. 例如,3 5 8,3^5 Mod 8 = 3. Input 3个正整数A B C,中间用空格分隔.(1 <= A,B,C <= 10^ ...
随机推荐
- [ABC213E] Stronger Takahashi
2023-01-17 题目 题目传送门 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 bfs 解题思路 首先,这道题的问题是从家到鱼市摧毁障碍物的最少次数.我们很容易 ...
- 一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问
原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 问题现象 7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值8 ...
- Java - ReentrantLock锁分析
Java - JUC核心类AbstractQueuedSynchronizer(AQS)底层实现 一. AQS内部结构介绍 JUC是Java中一个包 java.util.concurrent . ...
- AI绘图开源工具Stable Diffusion WebUI前端API对接
背景 本文主要介绍 AI 绘图开源工具 Stable Diffusion WebUI 的 API 开启和基本调用方法,通过本文的阅读,你将了解到 stable-diffusion-webui 的基本介 ...
- 探秘移动端BI:发展历程与应用前景解析
什么是移动端BI 维基百科 上对于 移动端商业智能的定义是这样的 > Mobile BI is a system that presents historical and real-time i ...
- python3利用smtplib发送、抄送邮件并附带附件
python3利用smtplib发送.抄送邮件并附带附件 1. 导包 import smtplib from email.mime.text import MIMEText from email.mi ...
- Python来源介绍
python来源 1.1 Python来源 1989年的圣诞节,一位来自荷兰,名叫Guidio van Rossum的年轻帅小伙子,为了打发无趣的时光,决定改善他参与设计,不是很满意的ABC语言,随着 ...
- 深度学习 YOLO v1 源码+笔记
""" Yolo V1 by tensorflow """ import numpy as np import tensorflow._ap ...
- 21.1 Python 使用PEfile分析PE文件
PeFile模块是Python中一个强大的便携式第三方PE格式分析工具,用于解析和处理Windows可执行文件.该模块提供了一系列的API接口,使得用户可以通过Python脚本来读取和分析PE文件的结 ...
- 一键安装LNMP
#!/bin/bash #2020年3月1日 #auto_install_lnmp. #by fly ################################ NGX_VER="$1 ...