Equalize

Equalize

题面翻译

有一个给定的长度为 \(n\) 的数列 \(a\),现在加上一个排列 \(b\),即 \(c_i=a_i+b_i\)

现在求对于所有可能的 \(b\)\(c\)出现最多的数的出现次数的最大值。

translate by @UniGravity.

题目描述

Vasya has two hobbies — adding permutations $ ^{\dagger} $ to arrays and finding the most frequently occurring element. Recently, he found an array $ a $ and decided to find out the maximum number of elements equal to the same number in the array $ a $ that he can obtain after adding some permutation to the array $ a $ .

More formally, Vasya must choose exactly one permutation $ p_1, p_2, p_3, \ldots, p_n $ of length $ n $ , and then change the elements of the array $ a $ according to the rule $ a_i := a_i + p_i $ . After that, Vasya counts how many times each number occurs in the array $ a $ and takes the maximum of these values. You need to determine the maximum value he can obtain.

$ ^{\dagger} $ A permutation of length $ n $ is an array consisting of $ n $ distinct integers from $ 1 $ to $ n $ in arbitrary order. For example, $ [2,3,1,5,4] $ is a permutation, but $ [1,2,2] $ is not a permutation ( $ 2 $ appears twice in the array), and $ [1,3,4] $ is also not a permutation ( $ n=3 $ but there is $ 4 $ in the array).

输入格式

Each test consists of multiple test cases. The first line contains a single integer $ t $ ( $ 1 \leq t \leq 2 \cdot 10^4 $ ) — the number of test cases. Then follows the description of the test cases.

The first line of each test case contains a single integer $ n $ ( $ 1 \le n \le 2 \cdot 10^5 $ ) — the length of the array $ a $ .

The second line of each test case contains $ n $ integers $ a_1, a_2, \ldots, a_n $ ( $ 1 \le a_i \le 10^9 $ ) — the elements of the array $ a $ .

It is guaranteed that the sum of $ n $ over all test cases does not exceed $ 2 \cdot 10^5 $ .

输出格式

For each test case, output a single number — the maximum number of elements equal to the same number after the operation of adding a permutation.

样例 #1

样例输入 #1

7
2
1 2
4
7 1 4 1
3
103 102 104
5
1 101 1 100 1
5
1 10 100 1000 1
2
3 1
3
1000000000 999999997 999999999

样例输出 #1

2
2
3
2
1
1
2

提示

In the first test case, it is optimal to choose $ p = [2, 1] $ . Then after applying the operation, the array $ a $ will be $ [3, 3] $ , in which the number $ 3 $ occurs twice, so the answer is $ 2 $ .

In the second test case, one of the optimal options is $ p = [2, 3, 1, 4] $ . After applying the operation, the array $ a $ will be $ [9, 4, 5, 5] $ . Since the number $ 5 $ occurs twice, the answer is $ 2 $ .

解题思路

题意可理解为求出通过将任意不重复的小于等于\(n\)的数对原序列中的数据进行替换后数组中可以通过上述操作所获得的相同的元素的最大数量。

可以先进行试想,对于一个等差数列我们可以通过加上一个完全相反的数列,使得所有数都变为相同的数,满足了题目的要求。

因为序列不对替换顺序进行要求,我们可以打乱原数组的顺序,构造一个含有间断点的类似于等差数列的序列。也就是说,我们可以对原序列进行排序,然后取出中间任意一部分理想的子序列构造出一个含有部分相同项和缺少部分项的等差数列。不难发现,因为题目中进行相加的序列不可以出现重复的数值,所以如果原序列中出现了相同的数,不可能存在相加不同的数的操作使得原序列中的两个相同的数仍然相同的情况。所以原序列相同的数据仅仅可能只有其中的一个是有效的。我们就可以把我们构造出的序列中的相同项全部删除,得到一个缺失部分项的等差数列。

题目中没有说明所有\(\leq n\)的数都必须使用,也就是说,我们可以再次构建一个缺少项的等差数列,让缺少项的等差序列和上文中构建的序列相加,这个使得这个序列和刚才我们构建的序列满足我们试想中的情况。

所以,我们就可以先判断试想中的合法条件,然后推广到这个题目。

在试想的情况中,我们应用类似于题目中的条件,即相反的序列必须满足\(\leq n\)。由于没有重复项,并且序列是满足递增的(单调),如果最大项和最小项(也就是要进行判断合法的序列中差值最大、最难相等的两个数)在这个条件下可以成立,那么其它差值较小的元素也一定可以成立。

我们希望最大项和最小项相等,那么就要让最小项的加值尽可能大,让最大项的加值尽可能小。那么在保证合法的前提下使用构造的相反数列中的最小项1和最大项\(n\)。我们让最小值+n,最大值+1。如果存在$ max + 1 \leq min + n $的情况成立,那么其它项之间较小的插值也一定能通过这个相反序列满足。题目中我们所能够构造的数列仅仅是试想中两个互相相反的序列各去除了一些项所得到的,所以我们可以将这个条件直接应用到解题中。

我们可以使用双指针去枚举所有合法的情况然后取出最大值作为答案。也可以使用$ max + 1 \leq min + n $这个条件,枚举左端点,然后使用二分查找寻找所有合法的右端点,然后取出最大值(直接暴力时间复杂度过高会超时)。

(仅列举第一种方法)

#include<bits/stdc++.h>
using namespace std;
int t,n;
vector<long long>a(n);
int main(){scanf("%d",&t);while(t--){scanf("%d",&n);vector<long long>a(n);for(int i=0;i<n-1;i++){scanf("%d ",&a[i]);}scanf("%d",&a[n-1]);sort(a.begin(),a.end());a.erase(unique(a.begin(), a.end()), a.end());int m = a.size(), res = 0;for (int l=0,r=0;r<m;r++){while(l<=r&&a[r]+1-a[l]>n)l++;if(l<=r&&a[r]+1-a[l]<=n)res=max(res,r-l+1);}printf("%d\n",res);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739855.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder Beginner Contest 361

AtCoder Beginner Contest 361 A - Insert给定一个长度为\(N\)的序列\(A\),现在希望将数字\(X\)插入到序列的第\(K\)个数字后面,变成一个新的序列\(B\)。输出序列\(B\)。 \(K,N,A_i,X\le 100\)模拟题。先读入\(N,K,X\)。接着在读入\(A\)的过程中一遍读入一遍输出,如果读到了…

2024暑假第一周总结

JAVA开发环境搭建和HelloWorld编译 1、JDK安装(java开发环境安装) 更改环境变量 Path环境变量 Path环境变量用于记住程序路径,方面在命令行窗口的任意目录启动程序 老版本的jdk需要进行配置环境变量,将jdk和bin包路径复制,新建path路径 Java_home环境变量 告诉操作系统JDK…

前端取唯一标识 UUID

// 使用工具 fingerprintjs 可以简单取到UUID1 <!DOCTYPE html>2 <html lang="en">3 4 <head>5 <meta charset="UTF-8">6 <meta http-equiv="X-UA-Compatible" content="IE=edge">7 <meta nam…

srpingboot 自定义 start

自动配置工程绑定配置文件,上逼格的 start 都支持自定义配置,我们也装像点~~ @ConfigurationProperties("cyrus.hello") public class CyrusHelloProperties {// 绑定配置文件 cyrus.hello.username 属性private String username;public String getUsername() {re…

Spring 配置文件加密

前文 在某些场景下,使用 Spring 作为开发组件时,不可避免地需要使用到配置文件,然而,对于配置文件中的某些敏感数据(如密码等信息字段),如果使用明文的方式,则可能在一定程度上导致信息泄露。为此,需要一种有效的方式来对这些字段进行加密处理,当前主流的一种加密方式…

博客搭建-图床篇

我们的博客难免少不了图片,图片管理是一个不小的难题。我们的博客难免少不了图片,图片管理是一个不小的难题。如果我们将图片全部放到我们自己的服务器上,那么带宽就基本上会被图片所占满了,这会导致网站加载很慢(特别是图片加载很慢)。 ‍ 什么是图床 为了解决图片的问题…

FPGA以太网学习-RGMII与GMII

以太网口都叫RJ45接口,从功能角度说,网口只是信号连接,本身没有通信能力。PHY(物理层),这边需要一个芯片,将并行的以太网数据到符合以太网物理层链路数据传输格式的电平信号转换。 上图PHY右边是经过编码后的串行数据信号,左侧是提供多种并行信号。网络变压器连接串行信…

网络通信系统的voronoi图显示与能耗分析matlab仿真

1.程序功能描述两层基站(BS)组成整个通讯网络,第 1 层为 Macro 基站记为 ,第 2 层为 Micro 基站记为 ,均服从泊松分布,相互独立,在坐标为 1010km 的面积内、按照泊松分布随机生成若干个点(随机抛洒两遍 nodes,两层叠加起来)。然后画成 voronoi 图: 也就是在相邻两个…

Django详细笔记

django 学习 特点快速开发 安全性高 可伸缩性强URL 组成部分 URL: 同意资源定位符 一个URL由以下几部分组成 scheme://host:port/path/?query-string=xxx#anchorscheme: 代表的是访问的协议,一般为http或https协议 host: 主机名,域名 port: 端口 http 默认:80端口 …

关于虚拟机的使用

1、从网上下载了Centos7 2024年CentOS镜像下载地址,包括CentOS官网、国内镜像下载,超详细教学,小白也能学会。-CSDN博客 2、通过VMware添加了该iso文件,打开虚拟机之后安装该系统就可以了 3、进入之后我们需要进行软件安装、安装位置、KDUMP、网络和主机名的修改操作其中,…

LSTUR论文阅读笔记

Neural News Recommendation with Long- and Short-term User Representations论文阅读笔记 这个同样是一篇很老但是比较经典的文章,这里来读一下 Abstract 存在的问题: ​ 用户通常既有长期偏好,也有短期兴趣。然而,现有的新闻推荐方法通常只学习用户的单一表征,这可能是…

实战篇——文件包含漏洞一

实战篇——文件包含漏洞(1) 本地文件包含 本地文件包含一般需要依赖文件上传漏洞。如果文件上传漏洞限制上传文件的后缀必须为.jpg,那么配合本地文件包含,就可以通过上传图片木马获得服务器权限。 上传图片木马:利用本地文件包含,成功连接一句话木马:可见本地文件包含最大…