数论 + 随机化

[Problem - D2 - Codeforces](https://codeforces.com/contest/1749/problem/D)

题意

给定一个长度为 \(n\;(1<=n<=40,n为偶数)\) 的数组 \(a\), \(-1e6<=a[i]<=1e6\)

求最大的模数 \(k\), 使得 \(a[i]\) 在模意义下有至少一半个数相等,如果 k 可以无穷大则输出 -1

思路

  1. 一开始想暴力枚举值域来验证,妄想能过 \(1e8\) ,但是 TLE 了
  2. 其实本题的思路和之前有道 ABC 的题很相似,要保证一半的数在数组里面,那就随机两个位置 u,v,有 \(\frac 14\) 的概率 \(a[u],a[v]\) 在被选中的里面,随机几十次就几乎可以保证至少有一次随机中的 \(a[u],a[v]\) 都确实模意义下相等
  3. 如果 \(a[u]\equiv a[v] \pmod k\), 则 \(k\mid abs(a[u]-a[v])\), 枚举因数作为 \(k\) 即可
  4. 一次随机的复杂度为 \(\sqrt {值域}*n\)

代码

#include <bits/stdc++.h>
using namespace std;
#define endl "\n" typedef long long ll;
typedef pair<int, int> PII; const int N = 2e6 + 10;
int n;
int a[110], b[110];
int cnt[N]; bool check(int u, int mod)
{
int ans = 1;
int uu = (a[u] % mod + mod) % mod;
for (int i = 0; i < n; i++)
{
if (i == u)
continue;
int j = (a[i] % mod + mod) % mod;
if (uu == j)
ans++;
}
return ans >= n / 2;
}
int solve()
{
map<int, int> mp;
for (int i = 0; i < n; i++)
{
mp[a[i]]++;
if (mp[a[i]] >= n / 2)
return -1;
}
int t = 100;
int ans = 1;
while(t--)
{
int u = rand() % n, v;
while(1)
{
v = rand() % n;
if (u != v)
break;
}
int D = abs(a[u] - a[v]);
for (int d = 1; d <= D / d; d++)
{
if (D % d)
continue;
if (check(u, d))
ans = max(ans, d);
if (D / d != d && check(u, D / d))
ans = max(ans, D / d);
}
}
return ans;
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int T;
cin >> T;
while(T--)
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
cout << solve() << endl;
}
return 0;
}

最新文章

  1. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
  2. RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)
  3. Web Essentials之Markdown和自定义编辑器(Web Essentials完结)
  4. python 笔记(一) —— 不要误用 ++i、--i
  5. 使用oracle utl_http包需要注意的事项
  6. Java并发包源码学习之AQS框架(二)CLH lock queue和自旋锁
  7. 为什么在Mac中无法用k web运行ASP.NET 5程序
  8. mysql语句优化认识
  9. win7和win8如何设置快速启动栏
  10. ZigBee HA示例程序分析
  11. visual studio 2012更换皮肤、功能添加
  12. 重新定义malloc和free 防止内存泄漏
  13. #include &lt;array&gt;
  14. C++学习(二) 入门篇
  15. 吴恩达机器学习笔记60-大规模机器学习(Large Scale Machine Learning)
  16. 16.python-I/O模型
  17. RocketMQ 简单梳理 及 集群部署笔记
  18. Android.PublishApplication
  19. 常见CSS
  20. JAVA-JSP内置对象之session对象设置并获得session生命周期

热门文章

  1. git cherry-pick 同步修改到另一个分支
  2. MAUI新生4.6-主题设置LightTheme&amp;DarkTheme
  3. 一个开放源代码,实现动态IL注入(Hook或补丁工具)框架:Lib.Harmony(Patch,PatchAll,Prefix,Postfix,Transpiler)
  4. day13-功能实现12
  5. Mariadb对数据库和表的操作
  6. Jupyter Notebook入门指南
  7. JS比较数值大小
  8. python之路22 hashlib、subprocess、logging模块
  9. [Leetcode]移除链表元素
  10. CF1744B Even-Odd Increments