博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1217 Minimum Modular
阅读量:6279 次
发布时间:2019-06-22

本文共 1300 字,大约阅读时间需要 4 分钟。

N个不同的数a[1],a[2]...a[n],你可以从中去掉K个数,并且找到一个正整数M,使得剩下的N - K个数,Mod M的结果各不相同,求M的最小值。
Input
第1行:2个数N, K,中间用空格分隔,N表示元素的数量,K为可以移除的数的数量(1 <= N <= 5000, 0 <= K <= 4, 1 <= a[i] <= 1000000)。
Output
输出符合条件的最小的M。
Input示例
5 112101112
Output示例
4 ———————————————————————— 如果a%mod==b%mod 那么(a-b)%mod==0 所以我们可以枚举mod 然后一波剪枝水过QAQ
#include
#include
#include
using namespace std;const int M=1e5+7,N=1000007;int read(){ int ans=0,f=1,c=getchar(); while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();} return ans*f;}int n,k,mx,v[M],vis[N],f[N];int main(){ n=read(); k=read(); if(n+1<=k) return puts("1"),0; for(int i=1;i<=n;i++) v[i]=read(),mx=max(mx,v[i]); sort(v+1,v+1+n); for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) f[v[j]-v[i]]++; for(int i=n-k;i<=mx;i++){ int cnt=0; for(int j=1;i*j<=mx;j++) cnt+=f[i*j]; if(cnt>(k*(k+1)>>1)) continue; cnt=0; for(int j=1;j<=n;j++){ int now=v[j]%i; if(vis[now]!=i) vis[now]=i; else cnt++; } if(cnt<=k) return printf("%d\n",i),0; } return 0;}
View Code

 

 

转载于:https://www.cnblogs.com/lyzuikeai/p/7747846.html

你可能感兴趣的文章
Mono for Android 优势与劣势
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
js 面试题
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
Javascript 中的 Array 操作
查看>>
java中包容易出现的错误及权限问题
查看>>
AngularJS之初级Route【一】(六)
查看>>
服务器硬件问题整理的一点总结
查看>>
SAP S/4HANA Cloud: Revolutionizing the Next Generation of Cloud ERP
查看>>
Mellanox公司计划利用系统芯片提升存储产品速度
查看>>
白帽子守护网络安全,高薪酬成大学生就业首选!
查看>>
ARM想将芯片装进人类大脑 降低能耗是一大挑战
查看>>
Oracle数据库的备份方法
查看>>
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>