E. Beautiful Array(cf954div3)

题意:给定一个数组,可以先对数组进行任意排序,每次操作可以选择一个ai,将它变成ai+k,

想让这个数组变成一个美丽数组(回文数组),求最少操作次数

分析:

先找出相同的数字,去掉;将取模相同的放一块,如果取模不同,无论怎么加他们都一定不会相等。放一块之后,会有两种情况,一种是偶数个,一种是奇数个。如果是偶数个,先排序,每每相邻两个可以求出最小操作次数。如果是奇数,如果只有一个数就直接放最中心,否则还要判断谁放在最中心。枚举删掉哪个数,然后前后缀和算出最小答案。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void sol(){
    int n,k;cin>>n>>k;
    map<int,int>mp;int t;
    for(int i=1;i<=n;i++){
        cin>>t;mp[t]++;
    }
    vector<int>a;
    for(auto&[x,y]:mp){
        if(y%2!=0){
            a.push_back(x);
        }
    }
    if(a.size()<=1){
        cout<<"0"<<endl;
        return;
    }
    map<int,vector<int>>rec;
    for(int i=0;i<a.size();i++){
        int c=a[i];
        rec[c%k].push_back(c);
    }
    ll ans=0;
    int cnt=0;
    
    for(auto& [x,cur]:rec){    
        int f=1;//0为奇数,1为偶数
        if(cur.size()%2!=0){
            cnt++;f=0;
            if(cnt>1){
            cout<<"-1"<<endl;
            return;    
            }
        }
        if(f==1){//如果是偶数
            sort(cur.begin(),cur.end());
            for(int i=1;i<cur.size();i+=2){
                ans+=(cur[i]-cur[i-1])/k;
            }
        }
        else if(cur.size()>1){//长度大于1的奇数个    
            sort(cur.begin(),cur.end());
            int m=cur.size();
            cnt++;
            vector<ll>p(m,0);
            vector<ll>s(m,0);
            p[1]=cur[1]-cur[0];
            for(int i=3;i<m;i+=2){
                p[i]=p[i-2]+cur[i]-cur[i-1];
            }
            s[m-2]=cur[m-1]-cur[m-2];
            for(int i=m-4;i>=0;i-=2){
                s[i]=s[i+2]+cur[i+1]-cur[i];
            }
            ll mi=min(p[m-2],s[1]);
            for(int i=2;i<m-2;i+=2){
                mi=min(mi,p[i-1]+s[i+1]);
            }
            ans+=mi/k;
        }
    }
    cout<<ans<<endl;
}
int main(){
    int t;cin>>t;
    while(t--)sol();
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux--深入理与解linux文件系统与日志文件分析

目录 一、文件与存储系统的 inode 与 block 1.1 硬盘存储 1.2 文件存取--block 1.3 文件存取--inode 1.4 文件名与 inode 号 ​编辑 1.5 查看 inode 号码方法 1.6 Linux 系统文件的三个主要的时间属性 1.7 硬盘分区结构 1.8 访问文件的简单了流程 1.9 inode 占用 1.…

从0-1搭建一个web项目(页面布局详解)详解

本章分析页面布局详解详解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 开源的后台管理框架。在一定程度上节省您的开发效率。另外本项目还封装了一些常用组件、hooks、指令、动态路由、按钮级别权限控制等功能。感兴趣的小伙伴可以访问源码点个赞 地…

资产几何?现代组织的外部攻击面

组织的外部攻击面情况如何&#xff1f;组织自己能完全掌握自己资产的情况吗&#xff1f; 工作来源 ASIA CCS 2024 工作背景 CISA 在 2022 年要求对政府的 IT 系统进行漏洞扫描&#xff0c;英国国家网络安全中心&#xff08;NCSC&#xff09;在 2022 年也计划扫描英国互联网…

智慧城市可视化页面怎么做?免费可视化工具可以帮你

智慧城市是一个综合性的概念&#xff0c;广泛应用于各个领域&#xff0c;如基础设施建设、信息化应用、产业经济发展、市民生活品质等。 可视化页面的制作也是一个综合性的过程&#xff0c;需要确定展示内容、数据收集与处理、设计可视化元素等多个环节紧密配合。 1. 明确展示…

无损音频格式 FLAC 转 MP3 音频图文教程

音频文件的格式多样&#xff0c;每种格式都有其独特的特点与适用场景。FLAC&#xff08;Free Lossless Audio Codec&#xff09;&#xff0c;作为一种无损音频压缩格式&#xff0c;因其能够完美保留原始音频数据的每一个细节而备受音频发烧友和专业人士的青睐。 然而&#xff0…

Profibus_DP转ModbusTCP网关模块连马保与上位机通讯

Profibus转ModbusTCP网关模块&#xff08;XD-ETHPB20&#xff09;广泛应用于工业自动化领域。例如&#xff0c;可以将Profibus网络中的传感器数据转换为ModbusTCP协议&#xff0c;实现数据的实时监控和远程控制。本文介绍了如何利用Profibus转ModbusTCP网关&#xff08;XD-ETHP…

AWS-WAF-Log S3存放,通过Athena查看

1.创建好waf-cdn 并且设置好规则和log存储方式为s3 2. Amazon Athena 服务 使用 &#xff08;注意s3桶位置相同得区域&#xff09; https://docs.aws.amazon.com/zh_cn/athena/latest/ug/waf-logs.html#waf-example-count-matched-ip-addresses 官方文档参考,建一个分区查询表…

pytorch实现水果2分类(蓝莓,苹果)

1.数据集的路径&#xff0c;结构 dataset.py 目的&#xff1a; 输入&#xff1a;没有输入&#xff0c;路径是写死了的。 输出&#xff1a;返回的是一个对象&#xff0c;里面有self.data。self.data是一个列表&#xff0c;里面是&#xff08;图片路径.jpg&#xff0c;标签&…

02-图像基础-参数

在做有关图像和视频类的实际项目时&#xff0c;常常会涉及到图像的一些配置&#xff0c;下面对这些参数进行解释。 我们在电脑打开一张照片&#xff0c;可以看到一张完整的图像&#xff0c;比如一张360P的图片&#xff0c;其对应的像素点就是640*360&#xff0c;可以以左上角为…

python-25-零基础自学python-处理异常三兄弟try-except-else

学习内容&#xff1a;《python编程&#xff1a;从入门到实践》第二版第十章 知识点&#xff1a; 程序异常如何处理&#xff1f;try-except-else try-尝试可能引起错误的步骤 except-错误步骤发生&#xff0c;打印一些需要用户知道的信息&#xff0c;没有就pass else-错误不…

Java-常用API

1-Java API &#xff1a; 指的就是 JDK 中提供的各种功能的 Java类。 2-Scanner基本使用 Scanner&#xff1a; 一个简单的文本扫描程序&#xff0c;可以获取基本类型数据和字符串数据 构造方法&#xff1a; Scanner(InputStream source)&#xff1a;创建 Scanner 对象 Sy…

【保姆级教程】CenterNet的目标检测、3D检测、关键点检测使用教程

一、代码下载 仓库地址:https://github.com/xingyizhou/CenterNet?tab=readme-ov-file 二、目标检测 2.1 下载预训练权重 下载预训练权重ctdet_coco_dla_2x.pth放到models文件夹下 下载链接:https://drive.google.com/file/d/18Q3fzzAsha_3Qid6mn4jcIFPeOGUaj1d/edit …

13--memcache与redis

前言&#xff1a;数据库读取速度较慢一直是无法解决的问题&#xff0c;大型网站应对的方式主要是使用缓存服务器来缓解这种情况&#xff0c;减少数据库访问次数&#xff0c;以提高动态Web等应用的速度、提高可扩展性。 1、简介 Memcached/redis是高性能的分布式内存缓存服务器…

按模版批量生成定制合同

提出问题 一个仪器设备采购公司&#xff0c;商品合同采购需要按模版生成的固定的文件&#xff0c;模板是固定的&#xff0c;只是每次需要替换信息&#xff0c;然后打印出来寄给客户。 传统方法 如果手工来做这个事情&#xff0c;准备好数据之后&#xff0c;需要从Excel表格中…

亚马逊卖家告别熬夜!批量定时上下架,自动调价

必用能功三个&#xff0c;不限制上传商品。 大家好&#xff0c;今天来讲下这款erp的定时上下架功能。 打开工具这栏选择智能调价&#xff0c;点击添加智能调价选择店铺&#xff0c;选择定时上架的商品添加也可以全部添加。每个商品的价格都是不同的&#xff0c;可以点击保底价…

昇思学习打卡-12-Vision Transformer图像分类

文章目录 ViT模型学习构建模型Multi-Head AttentionTransformerEncoderpos_embeddingVit部分实现 推理结果 ViT模型学习 Vision Transformer&#xff08;ViT&#xff09;简介 ViT则是自然语言处理和计算机视觉两个领域的融合结晶。在不依赖卷积操作的情况下&#xff0c;依然可…

最简单详细的jwt用户登录校验教程(新手必看)

首先简单建张用户表。 DROP TABLE IF EXISTS user; CREATE TABLE user (id bigint NOT NULL AUTO_INCREMENT,name varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,username varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL…

C++ 编译体系入门指北

前言 之从入坑C之后&#xff0c;项目中的编译构建就经常跟CMake打交道&#xff0c;但对它缺乏系统的了解&#xff0c;遇到问题又陷入盲人摸象。对C的编译体系是如何发展的&#xff0c;为什么要用CMake&#xff0c;它的运作原理是如何的比较感兴趣&#xff0c;所以就想系统学习…

云手机批量操作使用场景,从Amazon、TK等软件分析

云手机目前所具备的群控&#xff0c;批量操作&#xff0c;自动化等功能&#xff0c;对于电商&#xff0c;软测&#xff0c;办公&#xff0c;直播&#xff0c;营销等行业有很好的减负作用。 针对于具体的海外APP&#xff0c;云手机具体可以做哪些事情来帮助我们减轻压力&#x…

伺服【禾川X6】

驱动器&#xff1a; A&#xff1a;脉冲 B&#xff1a;EtherCAT // SV-X6 FB 040 AA 一套360 N&#xff1a;CANopen R&#xff1a;PROFINET 电机&#xff1a; SV-X6 MA 040A-B2 KA