题目链接:点击查看

题目大意:给出一个长度为 nnn 的序列,找到一个长度最长的子序列,满足存在一个模数 mmm,使得这个子序列中的所有数取模后相等

题目分析:挺有意思的一道题,首先假如取 m=2m=2m=2 的话,那么所有数字非奇即偶,所以答案至少是 ⌈n2⌉\lceil \frac{n}{2}\rceil⌈2n​⌉

假如我们随机选两个位置 x,yx,yx,y,满足 x≠yx\neq yx​=y,那么这两个位置同时位于答案中的概率至少为 14\frac{1}{4}41​,也就是说选不中的概率为 34\frac{3}{4}43​

再假如我们选择的 xxx 和 yyy 属于答案中,那么 mmm 可行的取值是 ∣(ax−ay)|(a_x-a_y)∣(ax​−ay​),筛出质因子后每次 O(n)O(n)O(n) 去计算答案就可以了

那么对上述操作执行 KKK 次,每次都选不中答案的概率就是 (34)K(\frac{3}{4})^K(43​)K,当 K=40K=40K=40 时,这个数值就是 10−510^{-5}10−5 级别的了

需要注意的是,答案记得初始化为 ans=1ans=1ans=1,因为上面的操作只能计算答案大于等于二的情况

因为 HDU 的上古评测机,还是建议打个欧拉筛优化一下筛质因子的过程,能快不少

代码:

// Problem: Integers Have Friends 2.0
// Contest: Virtual Judge - HDU
// URL: https://vjudge.net/problem/HDU-7073
// Memory Limit: 262 MB
// Time Limit: 5000 ms
//
// Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2)
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<list>
#include<unordered_map>
#define lowbit(x) (x&-x)
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
template<typename T>
inline void read(T &x)
{T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f;
}
template<typename T>
inline void write(T x)
{if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');
}
const int inf=0x3f3f3f3f;
const int N=1e6+100;
mt19937_64 eng(time(NULL));
LL a[N];
int n;
int cal(LL x,LL y) {int cnt=0;for(int i=1;i<=n;i++) {cnt+=a[i]%x==y;}return cnt;
}
int main()
{#ifndef ONLINE_JUDGE
//    freopen("data.in.txt","r",stdin);
//    freopen("data.out.txt","w",stdout);
#endif
//    ios::sync_with_stdio(false);int w;cin>>w;while(w--) {scanf("%d",&n);uniform_int_distribution<int>ran(1,n);for(int i=1;i<=n;i++) {scanf("%lld",a+i);}int ans=1;for(int K=1;K<=30;K++) {int l=-1,r=-1;while(l==r) {l=ran(eng),r=ran(eng);}LL tmp=llabs(a[l]-a[r]);for(int i=2;1LL*i*i<=tmp;i++) {if(tmp%i==0) {ans=max(ans,cal(i,a[l]%i));while(tmp%i==0) {tmp/=i;}}}if(tmp>1) {ans=max(ans,cal(tmp,a[l]%tmp));}}printf("%d\n",ans);}return 0;
}

2021HDU多校9 - 7073 Integers Have Friends 2.0(随机数)相关推荐

  1. HDU - 7073 Integers Have Friends 2.0 随机化 + 质因子

    传送门 文章目录 题意: 思路: 题意: 给你一个序列aaa,找一个最大的集合,集合中所有元素模mmm相等. 思路: 之前做过一道连续的,直接尺取就好,这个不连续加大了难度. 考虑最简单的情况m=2m ...

  2. Codeforces 1548B Integers Have Friends 尺取法 Hdu 7073 Integers Have Friends 2.0 力能扛鼎随机算法

    文章目录 题意 题解 CF1548B 题解 Hdu 7073 CF1548B HDU7073 题意 定义数的好友组为一个集合SSS,取正整数m>1,∀x∈s,xmodmm>1,\foral ...

  3. 2021HDU多校第九场1008HDU7073 Integers Have Friends 2. 随机化

    HUD地址:https://acm.hdu.edu.cn/showproblem.php?pid=7073  题目大意:选择数组中最多的数,使得他们模m同余(m>=2).求最大的数量. 思路:然 ...

  4. 【多校训练】2021HDU多校4

    [前言] 今天写题手感很好,写的都是1A,然而太蠢了做不动- - 开场自己切了三个水题,队友写了一个水题就开始搞不动了,后面就过了一个05. 字符串如此SB的东西都忘了,今天赶紧补回来了. rk53, ...

  5. 【多校训练】2021HDU多校6

    [前言] 这场比赛属实阴间,题十分诡异. 最后rk78,校3/9 1001. Yes Prime Minister [题目] 给定一个数 x x x,求一个最短的区间 [ l , r ] [l,r] ...

  6. 2021HDU多校第一场 zoto(莫队+分块)

    题意: 给你一个序列,q次询问,每次询问l-r的区间内数字大小为x-y之间内不重复的个,保证数据所有大小为1e5以内. 思路: 比赛的时候通过调整了一下分块的大小和各种优化,用莫队把题目给卡过去了,实 ...

  7. 2021HDU多校10 - 7084 Pty loves string(KMPnext树+主席树+dfs序)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,需要回答 qqq 次询问,每次询问给出一对 (x,y)(x,y)(x,y) ,意思是用 sss 的前缀 s[1:x]s[1:x] ...

  8. 2021HDU多校8 - 7057 Buying Snacks(矩阵快速幂套NTT优化dp)

    题目链接:点击查看 题目大意:给出 nnn 种糖果,每种糖果有大小包装之分,有三种购买方案,价钱分别如下: 单独购买一个小的,花费一块钱 单独购买一个大的,花费两块钱 ∀i>1\forall i ...

  9. 2021HDU多校8 - 7059 Counting Stars(线段树)

    题目链接:点击查看 题目大意:给出 nnn 个数字,需要执行 mmm 次操作,每次操作分为下列三种类型: 1 l r :输出区间 [l,r][l,r][l,r] 的 sumsumsum 和 2 l r ...

最新文章

  1. 借助Ant工具,实现快速开发
  2. haskell,lisp,erlang你们更喜欢哪个?
  3. mysql重新载入my.cnf_怎么重新加载MySQL的my.cnf?
  4. vue 筛选组件_记一个复杂组件(Filter)的从设计到开发
  5. Mac OS/Linux命令查询网络端口占用情况
  6. Node.js ES6 模块化的基本语法-直接导入并执行模块代码
  7. 【Linux磁盘优化管理--RAID和LVM】
  8. php inputcsv,php实现CSV文件导入和导出
  9. MS SQL 日常维护管理常用脚本(二)
  10. ECS 数据保护——数据备份新特性与最佳实践
  11. 搭建vue开发环境的步骤
  12. 代码审查的必要性和最佳实践
  13. 解决:视频中有噪声(电流声)怎么办的问题(简单实用高效的视频降噪方法)
  14. 威漫哨兵机器人_曾经秒杀X战警的哨兵机器人,在漫威漫画原著里更让人头疼!...
  15. Brain Predicted Age (一)
  16. 基于qiankun搭建ng-alain15微前端项目示例实践
  17. Socket编程入门C++
  18. Xftp 传文件到虚拟机一直显示状态错误,传不进去
  19. matlab 光栅 傅里叶,光栅原理及MATLAB仿真汇编.doc
  20. “200+语种,11种文档格式”,百度文档翻译API,真的很好用

热门文章

  1. 得胜php100怎么样,优缺点评测得胜Q麦评价如何?怎么样呢?老司机透漏
  2. 在mysql中删除表正确的是什么_在MySQL中删除表的操作教程
  3. linux 设备文件分区命令,Linux常见设备及相应/dev/xxx文件名、Mount Point、挂载点、Mount命令、fstab、挂载分区(示例代码)...
  4. 开发Eureka Server
  5. 用户认证失败或权限不足异常处理
  6. MySQL分组查询—简单使用
  7. 分布式ID-数据库自增ID
  8. SpringBoot-@ComponentScan、@Import
  9. 微服务通信带来的问题
  10. OAauth2.0包括以下角