题目大意:

给定一个包含 \(n\)(\(n\) 是偶数)个整数的数列 \(a_1,a_2,\ldots,a_n\)。

考虑一个可能的正整数 \(k\),在每次操作中,你可以选定一个 \(i\),并将 \(a_i\) 减少 \(k\)。

你可以执行任意多次(也可能是零次)操作,使这个数列中至少一半的数相等。

请找出最大的符合条件的 \(k\),如果 \(k\) 可以是任意的大小,输出 \(-1\)。

观察题目,不难发现,满足输出 \(-1\) 的充要条件就是原数列里已经至少有一半的数相等了,因此输入后我们判断一下这种情况是否存在即可。

题目中的操作,实际上就等价于让我们寻找一个最大的 \(k\),使得数列中至少有一半的数关于它同余即可。我们在数列中选出 \(a\) 和 \(b\),使得如下式子成立:

\[a\equiv b(\mod k)
\]

以此推出,得:

\[k\mid (a-b)
\]

这就说明,我们只需要枚举数列中任意两个数,将他们相减后得到的数设为 \(d\),枚举 \(d\) 的因数,寻找一个最大的因数使得数列中有至少一半的数关于它同余即可。

AC代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = 10000000;
  4. int n,a[MAXN];
  5. int t;
  6. map<int,int> m;
  7. int gcd(int a,int b){
  8. if(!b){
  9. return a;
  10. }
  11. return gcd(b,a % b);
  12. }
  13. int main(){
  14. cin >> t;
  15. while(t--){
  16. m.clear();
  17. cin >> n;
  18. n /= 2;
  19. for(int i = 1; i <= 2 * n; i++){
  20. cin >> a[i];
  21. m[a[i]]++;
  22. }
  23. bool flagb = 0;
  24. for(int i = 1; i <= 2 * n; i++){
  25. if(m[a[i]] >= n){
  26. cout << "-1\n";
  27. flagb = 1;
  28. break;
  29. }
  30. }
  31. if(flagb)continue;
  32. bool flag;
  33. int ans = 0;
  34. for(int l = 1; l <= 2 * n; l++){
  35. //cout << 1 << "\n";
  36. for(int r = l + 1; r <= 2 * n; r++){
  37. for(int j = (int)(sqrt(abs(a[l] - a[r]))) + 1; j >= 1; j--){
  38. if(abs(a[l] - a[r]) % j == 0 && abs(a[l] - a[r]) != 0){
  39. flag = 1;
  40. int cnt = 0;
  41. for(int i = 1; i <= 2 * n; i++){
  42. if((a[i] + MAXN) % j == (a[l] + MAXN) % j)cnt++;
  43. if(cnt == n){
  44. ans = max(ans,j);
  45. break;
  46. }
  47. }
  48. cnt = 0;
  49. int h = abs(a[l] - a[r]) / j;
  50. for(int i = 1; i <= 2 * n; i++){
  51. if((a[i] + MAXN) % h == (a[l] + MAXN) % h)cnt++;
  52. if(cnt == n){
  53. ans = max(ans,h);
  54. break;
  55. }
  56. }
  57. }
  58. }
  59. }
  60. }
  61. cout << ans << "\n";
  62. }
  63. return 0;
  64. }

CF1593D2 Half of Same的更多相关文章

随机推荐

  1. 干货 | 一文彻底读懂nginx中的location指令

    一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 一文带你读懂Nginx反向代理 ...

  2. Spring Boot 2.7.0发布,2.5停止维护,节奏太快了吧

    这几天是Spring版本日,很多Spring工件都发布了新版本, Spring Framework 6.0.0 发布了第 4 个里程碑版本,此版本包含所有针对 5.3.20 的修复补丁,以及特定于 6 ...

  3. Android7.1.2 源码编译并烧写Nexus5X

    1.环境配置 Ubuntu18.04 openJDK1.8 Python2.7 2.更新Ubuntu镜像源 编辑/etc/apt/source.list,替换为以下内容 deb http://mirr ...

  4. 每天一个 HTTP 状态码 203

    203 Non-Authoritative Information 203 Non-Authoritative Information 'Non-Authoritative Informative' ...

  5. 用树莓派USB摄像头做个监控

    [前言] 看着阴暗的角落里吃灰噎到嗓子眼的树莓派,一起陪伴的时光历历在目,往事逐渐涌上心头,每每触及此处,内心总会升腾起阵阵怜悯之情... 我这有两个设备,一个是积灰已久的树莓派,另一个是积灰已久的U ...

  6. MySQL锁(乐观锁、悲观锁、多粒度锁)

    锁 并发事务可能出现的情况: 读-读事务并发:此时是没有问题的,读操作不会对记录又任何影响. 写-写事务并发:并发事务相继对相同的记录做出改动,因为写-写并发可能会产生脏写的情况,但是没有一个隔离级别 ...

  7. redis客户端打不开 提示cannot connect to server dev.check log for details

    我当前状况是redis客户端打不开,之前一直好好的(虽然作为一个程序员我不配说这句话,哈哈),但是我排查了我觉得所有的可能性,我用的阿里云的redis(还没有到购买到期时间),然后我就关闭了防火墙,你 ...

  8. 【动态规划】统计蚂蚁 (ants)

    题目 描述 蚂蚁山上有T(1<=T<=1,000)种蚂蚁,标记为1..T,每种蚂蚁有N_i只蚂蚁(1<=N_i<=100),现有A(A<=5000)只蚂蚁,从中选出S,S ...

  9. 【Java面试】Mysql为什么使用B+Tree作为索引结构

    一个工作8年的粉丝私信了我一个问题. 他说这个问题是去阿里面试的时候被问到的,自己查了很多资料也没搞明白,希望我帮他解答. 问题是: "Mysql为什么使用B+Tree作为索引结构" ...

  10. 拙见--springMVC的controller接受的请求参数

    1-这种是最常用的表单参数提交,ContentType指定为application/x-www-form-urlencoded,也就是会进行URL编码. 1.1-对象类型实体Bean接收请求参数(表单 ...