CF1593D2 Half of Same
题目大意:
给定一个包含 \(n\)(\(n\) 是偶数)个整数的数列 \(a_1,a_2,\ldots,a_n\)。
考虑一个可能的正整数 \(k\),在每次操作中,你可以选定一个 \(i\),并将 \(a_i\) 减少 \(k\)。
你可以执行任意多次(也可能是零次)操作,使这个数列中至少一半的数相等。
请找出最大的符合条件的 \(k\),如果 \(k\) 可以是任意的大小,输出 \(-1\)。
观察题目,不难发现,满足输出 \(-1\) 的充要条件就是原数列里已经至少有一半的数相等了,因此输入后我们判断一下这种情况是否存在即可。
题目中的操作,实际上就等价于让我们寻找一个最大的 \(k\),使得数列中至少有一半的数关于它同余即可。我们在数列中选出 \(a\) 和 \(b\),使得如下式子成立:
\]
以此推出,得:
\]
这就说明,我们只需要枚举数列中任意两个数,将他们相减后得到的数设为 \(d\),枚举 \(d\) 的因数,寻找一个最大的因数使得数列中有至少一半的数关于它同余即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 10000000;
int n,a[MAXN];
int t;
map<int,int> m;
int gcd(int a,int b){
if(!b){
return a;
}
return gcd(b,a % b);
}
int main(){
cin >> t;
while(t--){
m.clear();
cin >> n;
n /= 2;
for(int i = 1; i <= 2 * n; i++){
cin >> a[i];
m[a[i]]++;
}
bool flagb = 0;
for(int i = 1; i <= 2 * n; i++){
if(m[a[i]] >= n){
cout << "-1\n";
flagb = 1;
break;
}
}
if(flagb)continue;
bool flag;
int ans = 0;
for(int l = 1; l <= 2 * n; l++){
//cout << 1 << "\n";
for(int r = l + 1; r <= 2 * n; r++){
for(int j = (int)(sqrt(abs(a[l] - a[r]))) + 1; j >= 1; j--){
if(abs(a[l] - a[r]) % j == 0 && abs(a[l] - a[r]) != 0){
flag = 1;
int cnt = 0;
for(int i = 1; i <= 2 * n; i++){
if((a[i] + MAXN) % j == (a[l] + MAXN) % j)cnt++;
if(cnt == n){
ans = max(ans,j);
break;
}
}
cnt = 0;
int h = abs(a[l] - a[r]) / j;
for(int i = 1; i <= 2 * n; i++){
if((a[i] + MAXN) % h == (a[l] + MAXN) % h)cnt++;
if(cnt == n){
ans = max(ans,h);
break;
}
}
}
}
}
}
cout << ans << "\n";
}
return 0;
}
CF1593D2 Half of Same的更多相关文章
随机推荐
- 面试官:我把数据库部署在Docker容器内,你觉得如何?
开源Linux 一个执着于技术的公众号 上一篇:CentOS 7上搭建Zabbix4.0 近2年Docker非常的火热,各位开发者恨不得把所有的应用.软件都部署在Docker容器中,但是您确定也要把数 ...
- Linux的快捷使用(不断更新中)
Linux 命令行提示符 ~代表当前目录,即家目录,#是超级用户提示符,如果是普通用户使用$ 基本快捷键的使用 移动光标命令 Ctrl+A:移动光标到开头 Ctrl+E:移动光标到结尾 Ctrl+F: ...
- 一个关于 useState 的误解
一个关于 useState 的误解 本文写于 2020 年 11 月 17 日 前两天有人问了我一个问题,他有一段这样的代码: function App() { const [n, setN] = u ...
- MongoDB是什么?非关系型数据库的优点?安装使用教程
哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 书接上回,由于球姐都有孩子了, ...
- CentOS配置epel源
https://opsx.alibaba.com/mirror epel 配置方法 1.备份(如有配置其他epel源) mv /etc/yum.repos.d/epel.repo /etc/yum.r ...
- C# 与LINQ有关的语言特性
1.隐式类型 我们知道强类型语言 C C++ C# Java 对变量的定义前必须要确定这个变量是什么类型的 例如 string str="abc"; int num ...
- CF Divan and Kostomuksha
题意:NKOJ CF 思路:首先发现贪心不了.因此dp.然后这题需要维护的就\(g_i\)和\(sum{g_i}\) 状态:\(dp[i]\): 当前最后一个为\(g_i\)的最大值 \(dp[i]= ...
- Redis - Redlock算法
Redis - Redlock算法 在Redis的分布式环境中,我们假设有N个Redis master.这些节点完全互相独立,不存在主从复制或者其他集群协调机制.之前我们已经描述了在Redis单实例下 ...
- 基于“均态分布”随机数算法的一次性口令OneTimePassword(原创)
/* 所谓均态分布随机数算法是指:每个数(整数或实数)无序地分布在数轴上,值只出现一次永不重复.体现了香农的一次一密理论. * 均体现在每个数的值是平均概率,即都有出现:态体现在每个数在数轴上的位置是 ...
- 简述电动汽车的发展前景及3D个性化定制需求
李彦宏前几天又搞事,他宣布百度要开始造电动汽车了!百度市值更是因此一夜暴涨了700亿. 这熟悉的配方,好像在乔布斯.库克那里也见过. 苹果的"iCar"(或者是Apple Car) ...