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的更多相关文章
随机推荐
- 干货 | 一文彻底读懂nginx中的location指令
一个执着于技术的公众号 Nginx系列导读 给小白的 Nginx 10分钟入门指南 Nginx编译安装及常用命令 完全卸载nginx的详细步骤 Nginx 配置文件详解 一文带你读懂Nginx反向代理 ...
- Spring Boot 2.7.0发布,2.5停止维护,节奏太快了吧
这几天是Spring版本日,很多Spring工件都发布了新版本, Spring Framework 6.0.0 发布了第 4 个里程碑版本,此版本包含所有针对 5.3.20 的修复补丁,以及特定于 6 ...
- Android7.1.2 源码编译并烧写Nexus5X
1.环境配置 Ubuntu18.04 openJDK1.8 Python2.7 2.更新Ubuntu镜像源 编辑/etc/apt/source.list,替换为以下内容 deb http://mirr ...
- 每天一个 HTTP 状态码 203
203 Non-Authoritative Information 203 Non-Authoritative Information 'Non-Authoritative Informative' ...
- 用树莓派USB摄像头做个监控
[前言] 看着阴暗的角落里吃灰噎到嗓子眼的树莓派,一起陪伴的时光历历在目,往事逐渐涌上心头,每每触及此处,内心总会升腾起阵阵怜悯之情... 我这有两个设备,一个是积灰已久的树莓派,另一个是积灰已久的U ...
- MySQL锁(乐观锁、悲观锁、多粒度锁)
锁 并发事务可能出现的情况: 读-读事务并发:此时是没有问题的,读操作不会对记录又任何影响. 写-写事务并发:并发事务相继对相同的记录做出改动,因为写-写并发可能会产生脏写的情况,但是没有一个隔离级别 ...
- redis客户端打不开 提示cannot connect to server dev.check log for details
我当前状况是redis客户端打不开,之前一直好好的(虽然作为一个程序员我不配说这句话,哈哈),但是我排查了我觉得所有的可能性,我用的阿里云的redis(还没有到购买到期时间),然后我就关闭了防火墙,你 ...
- 【动态规划】统计蚂蚁 (ants)
题目 描述 蚂蚁山上有T(1<=T<=1,000)种蚂蚁,标记为1..T,每种蚂蚁有N_i只蚂蚁(1<=N_i<=100),现有A(A<=5000)只蚂蚁,从中选出S,S ...
- 【Java面试】Mysql为什么使用B+Tree作为索引结构
一个工作8年的粉丝私信了我一个问题. 他说这个问题是去阿里面试的时候被问到的,自己查了很多资料也没搞明白,希望我帮他解答. 问题是: "Mysql为什么使用B+Tree作为索引结构" ...
- 拙见--springMVC的controller接受的请求参数
1-这种是最常用的表单参数提交,ContentType指定为application/x-www-form-urlencoded,也就是会进行URL编码. 1.1-对象类型实体Bean接收请求参数(表单 ...