题意:给定一个N个不同的非负整数(每个数不大于10^6),1<=N<=5000,问找到一个最小的m使得N个数去掉最多x(0<=x<k)个数后能够使得N-x个数%m两两不同。

解法:首先可以给定出一个暴力的方法,那就是枚举所有的m,从1开始,然后统计余数相同的数一共多出来多少个,很明显,当多出来的数大于k时则不满足情况,从小到大枚举m遇到第一个满足要求的返回即可。

但是这样很显然会超时,时间复杂度为O(N*10^6),这里有一个优化如下:

统计出所有的两两组合差值的情况,如有两个数x,y如果x % m = y %m,那么(x - y) % m = 0,统计差值将在后面的计算中发挥作用。当算法枚举到一个m的时候,那么我们就可以在O(10^6/m)的时间内统计出所有差值满足(x-y)%m=0的组数,只要统计差值为1*m, 2*m, ... , p*m <= 10^6的总数sum即可。那么这个组数与拥有相同余数多出来的数有什么关系呢?如果(x - y) % m = 0只能够说明他们对m的余数相等,但是不能保证sum组的余数均相等或者均不相等。

那么如果所有的sum组每组的余数不同:如sum = 5, m = 13.  存在如下五组:(13, 26), (14, 27), (15, 28), (16, 29), (17, 30)。那么重复的数就是5。
如果所有sum组每组的余数都相同:如sum = 6, m = 13. 存在如下五组:(13, 26), (13, 39), (13, 52), (26, 39), (26, 52), (39, 52)。那么重复的数就是3。

而可能的取值就是在这两个数之间的,我们取一个下限,即如果下限超过了k则可以判定退出了。k+1个相同余数的数就将不满足题意,他们一共能够生成:C(2, k+1)种组合情况,所以每次验证之前加上这个验证即可。

时间复杂度暂时不知道如何计算。

代码如下:

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;int gap[1000005];
int N, K;
int seq[5005];
char lef[1000005];int main() {int MM, cnt, sum;while (scanf("%d %d", &N, &K) != EOF) {MM = -1;memset(gap, 0, sizeof (gap));for (int i = 0; i < N; ++i) {scanf("%d", &seq[i]);MM = max(MM, seq[i]);}for (int i = 0; i < N; ++i) {for (int j = 0; j < i; ++j) { // 无重复选出两两组合 ++gap[abs(seq[i] - seq[j])];}}MM = MM + 1;int flag = 0;for (int m = 1; m <= MM && !flag; ++m) {cnt = sum = 0;for (int i = m; i <= MM; i += m) {sum += gap[i];if (sum > K*(K+1)/2) break;}if (sum > K*(K+1)/2) continue;flag = m;for (int i = 0; i < N; ++i) {int k = seq[i] % m;if (!(lef[k])) lef[k] = 1;else if(++cnt > K) { // cnt用于统计重复度flag = 0;break;}}for (int i = 0; i < N; ++i) {lef[seq[i] % m]    = 0;}}printf("%d\n", flag);}return 0;
}

转载于:https://www.cnblogs.com/Lyush/archive/2013/05/14/3077258.html

CF#303C Minimum Modular 数学分析相关推荐

  1. Codeforces Round #183 (Div. 2)

    A. Pythagorean Theorem II 暴力,\(O(n^2)\). B. Calendar 每个日期计算到0年1月1日的天数,相当于转化成前缀和形式. 闰年数计算\[\lfloor\fr ...

  2. codeforce303C-Minimum Modular-剪枝,暴力

    Minimum Modular 题意:就是在一堆数字中,每一个数字对m取模不能等于这堆数字中的其他数字,同时给了K个机会可以删除一些数字.求最小的m: 思路:我一开始完全没思路,队长说的并查集什么的不 ...

  3. 如何让python进程常驻内存_常驻内存程序--python+rrd监控cpu

    问题1: A. 编写一个C程序,常驻内存且占用100M的内存. #include #include #include #include #define MAXFILE 65535 #define si ...

  4. [CF/AT/Luogu]各大网站网赛 爆肝部部长工作报告文件Ⅱ

    文章目录 CodeForces LATOKEN-Round-1(Div.1+Div.2) A. Colour the Flag B. Histogram Ugliness C. Little Alaw ...

  5. codeforce 804B Minimum number of steps

    cf劲啊 原题: We have a string of letters 'a' and 'b'. We want to perform some operations on it. On each ...

  6. 数学分析原理 定理 6.12

    (a)如果在$[a,b]$上$f_1\in\mathcal{R}(\alpha)$且$f_2\in\mathcal{R}(\alpha)$,那么对于任意的常数$c_1,c_2$,$$c_1f_1+c_ ...

  7. NOIp系列题目及CF小结

    长期更新中2333 2018/7/2 先看一下昨晚的cf Codeforces Round #493 (Div. 2) A. Balloons 这个题...直接模拟233 B. Cutting 来一下 ...

  8. cf #823 Div.2(A~C)

    Cf #823 Div.2 文章目录 Cf #823 Div.2 [A. Planets](https://codeforces.com/contest/1730/problem/A) [B. Mee ...

  9. cf 877D Olya and Energy Drinks

    一 原题 D. Olya and Energy Drinks time limit per test 2 seconds memory limit per test 256 megabytes inp ...

最新文章

  1. BZOJ 1192 鬼谷子的钱袋 数论
  2. life science 研究领域之生物信息学
  3. java:能否得到一个对象的内存地址?
  4. 用 JavaScript 的方式理解递归
  5. 前端学习(2607):vue指令
  6. 关于python 和C++使用cv画矩形并填充颜色同时填充文字
  7. 如何利用计算机英文缩写,【英文缩写】有关计算机的英文都在这儿
  8. 华为关闭telnet命令_华为交换机关闭Telnet
  9. Nexus下载、安装与使用
  10. lamp一键安装包不安装mysql_LAMP一键安装包-CentOS 5/6下,添加pdo_mysql
  11. 航模的无刷电机到底是什么电机
  12. matlab教程黄金分割,Matlab程序设计在黄金分割法教学中的应用
  13. 【HTML/CSS】HTML/CSS个人学习总结
  14. linux设置打开终端快捷键
  15. linux网卡slave状态,生产环境中linux bonding 主备模式slave网卡切换的方法
  16. 原码、补码的除法运算
  17. 斯柯达支持Android auto吗,斯柯达在SUV的布局输了吗?看柯米克和柯珞克的现状就知道...
  18. 逻辑卷管理LVM(logical volume manager)
  19. 扬州旅游app(五)
  20. 关于vue+capacitor打包android后无法访问http问题的总结

热门文章

  1. vba thisworkbook 切换表 执行 速度慢_带你初探VBA事件的大门—工作簿事件
  2. python微信好友分析源代码_搞事情了 | 教你用Python分析微信好友信息(内附完整代码)...
  3. python综合案例分享_Python面向对象 三大特性 综合案例+1(视频里的作业)
  4. 高考成绩2021年怎么查询,2021高考成绩怎么查询 2021年各省市高考成绩查询时间介绍...
  5. zuul 动态路由mysql_zuul 动态路由 - typistw的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. 量子不可克隆 计算机,量子不可克隆证明及推理
  7. python开发环境和运行环境的区别_Django 开发环境与生产环境的区分详解
  8. mha检测mysql报错_MySQL MHA 报错处理
  9. 大数据算法:排位问题
  10. 响应式开发一招致胜 学习视频 分享