当前位置: 首页 > news >正文

ARC126D Pure Straight

ARC126D Pure Straight

题目大意

给一个长度为nnn的整数序列A=(a1,a2,…,an)A=(a_1,a_2,\dots,a_n)A=(a1,a2,,an),其中ai∈[1,k]a_i\in [1,k]ai[1,k]

你可以做如下操作任意次:

  • 交换相邻两个元素

求最小的操作次数,使得序列AAA满足下列条件:

  • AAA包含(1,2,…,k)(1,2,\dots,k)(1,2,,k)这个子串

2≤k≤16,k≤n≤2002\leq k\leq 16,k\leq n\leq 2002k16,kn200


题解

我们可以先将在111kkk内的数移到一段,然后在这一段区间内排序。

令构成子串的元素的下标从小到大依次为c1,c2,…,cnc_1,c_2,\dots,c_nc1,c2,,cn,中点位置为mid=⌊k2⌋mid=\lfloor\dfrac k2\rfloormid=2k,则显然让所有acia_{c_i}aciacmida_{c_mid}acmid移动是最优的,总步数为

(∑i=1mid−1(cmid−mid+i)−ci)+(∑i=mid+1kci−(cmid+i−mid))(\sum\limits_{i=1}^{mid-1}(c_{mid}-mid+i)-c_i)+(\sum\limits_{i=mid+1}^kc_i-(c_{mid}+i-mid))(i=1mid1(cmidmid+i)ci)+(i=mid+1kci(cmid+imid))

我们发现这个式子中的许多地方可以抵消,最后式子可变为

(∑i=mid+1kci)−(∑i=1mid−1ci)−cmid×(n%2==0)+mid×(n%2==0)+(∑i=1mid−1i)−(∑i=mid+1ki)(\sum\limits_{i=mid+1}^kc_i)-(\sum\limits_{i=1}^{mid-1}c_i)-c_{mid}\times (n\%2==0)+mid\times(n\%2==0)+(\sum\limits_{i=1}^{mid-1}i)-(\sum\limits_{i=mid+1}^ki)(i=mid+1kci)(i=1mid1ci)cmid×(n%2==0)+mid×(n%2==0)+(i=1mid1i)(i=mid+1ki)

后面mid×(n%2==0)+(∑i=1mid−1i)−(∑i=mid+1ki)mid\times(n\%2==0)+(\sum\limits_{i=1}^{mid-1}i)-(\sum\limits_{i=mid+1}^ki)mid×(n%2==0)+(i=1mid1i)(i=mid+1ki)是可以O(1)O(1)O(1)求出的,我们来看看如何求前面的部分。

可以用状压DP,设fi,sf_{i,s}fi,s表示枚举到AAA的第iii位时状态为ssssss的二进制位111表示已取过这个数字,000表示没取过这个数字。我们需要预处理数组hvshv_shvs,表示sss的二进制位中有多少个111

状态转移式如下

fi,s∣(1<<ai−1)={fs−i+ps,aihvs+1<midfs−i×(k%2==0)+ps,aihvs+1=midfs+i+ps,aihvs+1>midf_{i,s|(1<<a_i-1)}= \left\{\begin{matrix} f_s-i+p_{s,a_i} \qquad\qquad\qquad\qquad \ \ hv_s+1<mid \\ f_s-i\times(k\%2==0)+p_{s,a_i} \qquad hv_s+1=mid\\ f_s+i+p_{s,a_i} \qquad\qquad\qquad\qquad \ \ hv_s+1>mid \end{matrix}\right.fi,s(1<<ai1)=fsi+ps,ai  hvs+1<midfsi×(k%2==0)+ps,aihvs+1=midfs+i+ps,ai  hvs+1>mid

其中fi,s∣(1<<ai−1)f_{i,s|(1<<a_i-1)}fi,s(1<<ai1)与后面的部分取max⁡\maxmax

下面来解释一下ppp是什么。因为在将111kkk内的数移到一段后,内部还要调整。根据冒泡排序的原理,若要用最少的操作次数排好序,每个数对操作次数的贡献为在它之前比他大的数的个数。ps,ip_{s,i}ps,i表示在sss中二进制位数大于iii且该位为111的数量,在转移式中表示加入这个元素的贡献。

求出fff后,加上mid×(n%2==0)+(∑i=1mid−1i)−(∑i=mid+1ki)mid\times(n\%2==0)+(\sum\limits_{i=1}^{mid-1}i)-(\sum\limits_{i=mid+1}^ki)mid×(n%2==0)+(i=1mid1i)(i=mid+1ki)即为答案。

时间复杂度为O(n⋅2k)O(n\cdot2^k)O(n2k)

code

#include<bits/stdc++.h>
using namespace std;
int n,k,mid,ans,a[205],v[20],hv[1<<16],p[1<<16][20],f[1<<16];
void pd(int now){f[now]=1000000000;int s=0;for(int i=k;i>=1;i--){p[now][i]=s;s+=v[i];}hv[now]=s;
}
void dfs(int t,int now){if(t<k) dfs(t+1,now);else pd(now);now+=(1<<t-1);v[t]=1;if(t<k) dfs(t+1,now);else pd(now);v[t]=0;
}
int main()
{scanf("%d%d",&n,&k);mid=(k+1)/2;for(int i=1;i<=n;i++){scanf("%d",&a[i]);}dfs(1,0);f[0]=0;for(int i=1;i<=n;i++){for(int s=(1<<k)-1;s>=0;s--){if(s&(1<<a[i]-1)) continue;int t=s|(1<<a[i]-1);if(hv[s]+1<mid) f[s|t]=min(f[s|t],f[s]-i+p[s][a[i]]);else if(hv[s]+1==mid) f[s|t]=min(f[s|t],f[s]-i*(k%2==0)+p[s][a[i]]);else f[s|t]=min(f[s|t],f[s]+i+p[s][a[i]]);}}ans=f[(1<<k)-1];if(k%2==0) ans+=mid;ans=ans+(mid)*(mid-1)/2-(k-mid)*(k+mid+1)/2;printf("%d",ans);return 0;
}

相关文章:

ARC126D Pure Straight

ARC126D Pure Straight 题目大意 给一个长度为nnn的整数序列A(a1,a2,…,an)A(a_1,a_2,\dots,a_n)A(a1​,a2​,…,an​)&#xff0c;其中ai∈[1,k]a_i\in [1,k]ai​∈[1,k]。 你可以做如下操作任意次&#xff1a; 交换相邻两个元素 求最小的操作次数&#xff0c;使得序列AA…...

基于RK3588的嵌入式linux系统开发(四)——uboot镜像下载(基于RKDevTool工具)

官方提供的SDK中包含RKDevTool工具&#xff08;RKDevTool_Release_v2.92&#xff09;和相应的驱动&#xff08;DriverAssitant_v5.1.1&#xff09;。本节主要介绍在windows操作系统环境下利用RKDevTool下载以上生成的uboot镜像和bootloader镜像。注意&#xff1a;本节使用的板卡…...

设计模式之策略模式与责任链模式详解和应用

目录1.策略模式1.1 目标1.2.内容定位1.3.定义1.4.应用场景1.5.促销优惠业务场景1.6 用策略模式实现选择支付方式的业务场景1.7 策略模式在框架源码中的体现1.8 策略模式的优缺点2 责任链模式2.1 责任链楼式的应用场景2.2 利用责任链模式进行数据校验拦截2.3 责任链模式和建造者…...

广度优先搜索(BFS)-蓝桥杯

一、BFS搜索的原理BFS搜索的原理&#xff1a;“逐层扩散”&#xff0c;从起点出发&#xff0c;按层次从近到远&#xff0c;逐层先后搜索。编码&#xff1a;用队列实现。应用&#xff1a;BFS一般用于求最短路径问题&#xff0c;BFS的特点是逐层搜索&#xff0c;先搜到的层离起点…...

Java Type类

文章目录Type简介Type分类1. 原始类型(Class)2. 参数化类型(ParameterizedType)3. 类型变量(TypeVariable)4. 通配符类型(WildcardType)5. 泛型数组类型(GenericArrayType)Type简介 Type是Java编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型…...

Springboot扩展点之CommandLineRunner和ApplicationRunner

Springboot扩展点系列&#xff1a;Springboot扩展点之ApplicationContextInitializerSpringboot扩展点之BeanFactoryPostProcessorSpringboot扩展点之BeanDefinitionRegistryPostProcessorSpringboot扩展点之BeanPostProcessorSpringboot扩展点之InstantiationAwareBeanPostPro…...

ngixn 常用配置之文件类型与自定义 log

大家好&#xff0c;我是 17 。 总结了一些 nginx 的常用配置。从入口文件开始&#xff0c;今天讲一下文件类型和自定义log 为了讲述方便&#xff0c;环境为 CentOS 7&#xff0c; nginx 版本 1.21。 配置文件入口 /etc/nginx/nginx.conf这是入口文件&#xff0c;这个文件里…...

【100个 Unity实用技能】 | Unity 通过自定义菜单将资源导出

Unity 小科普 老规矩&#xff0c;先介绍一下 Unity 的科普小知识&#xff1a; Unity是 实时3D互动内容创作和运营平台 。包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者&#xff0c;借助 Unity 将创意变成现实。Unity 平台提供一整套完善的软件解决方案&#xff…...

0.3调试opencv源码的两种方式

调试opencv源码的两种方式 上两篇我们分别讲了如何配置opencv环境&#xff0c;以及如何编译opencv源码方便我们阅读。但我们还是无法调试我们的代码&#xff0c;无法以我们的程序作为入口来一步一步单点调试看opencv是如何执行的。 【opencv源码解析0.1】VS如何优雅的配置ope…...

Redis的常见操作和Session的持久化

安装Redis使用yum命令&#xff0c;直接将redis安装到linux服务器&#xff1a;yum -y install redis启动redis使用以下命令&#xff0c;以后台运行方式启动redis&#xff1a;redis -server /etc/redis.conf &操作redis使用以下命令启动redis客户端&#xff1a;redis-cli设置…...

TypeScript笔记(二)

背景 上一篇文章我们介绍了TypeScript的一些特性&#xff0c;主要是其与JavaScript的比较&#xff0c;接下来我们将会开始学习Type的语法&#xff0c;这篇文章将会介绍TypeScript的数据类型。 原始数据类型 TypeScript是JavaScript的超集&#xff0c;TypeScript的数据类型就…...

【MyBatis】源码学习 03 - 类型处理器 TypeHandler

文章目录前言参考目录学习笔记1、type 包中类的归类总结2、类型处理器2.1、TypeReference 类3、类型注册表3.1、TypeHandlerRegistry#getTypeHandler前言 本文内容对应的是书本第 8 章的内容&#xff0c;主要是关于类型处理器 TypeHandler 的学习。 这一章节的学习有些地方理…...

建造《流浪地球2》中要毁灭人类的超级量子计算机MOSS的核心量子技术是什么?

1.《流浪地球2》中的量子计算机 2023年中国最火的电影非《流浪地球2》莫属&#xff0c;在《流浪地球2》中有一个人工智能机器人MOSS &#xff0c;它的前身是“550W”超级量子计算机&#xff0c;“MOSS”是它给自己起的名字&#xff08;“550W”倒转180度就是“MOSS”&#xff…...

数据结构~七大排序算法(Java实现)

目录 插入排序 直接插入排序 希尔排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序 递归实现 优化版本 归并排序 插入排序 直接插入排序 public class MySort {public static void insertSort(int[] array) {for (int i 1; i < array.length;…...

python练习

项目场景一&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 问题描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶…...

RPC-thrift实践

参考&#xff1a;https://www.cnblogs.com/52fhy/p/11146047.html 参考&#xff1a;https://juejin.cn/post/7138032523648598030 实践 安装thrift brew install thriftthrift -version 编写thrift文件 新建文件夹thrift新建文件 结构体文件 Struct.thrift 服务文件 Service.…...

Maven:工程的拆分与聚合

Maven 拆分与聚合创建父工程创建子模块pom.xml配置示例拆分与聚合 在 Maven 中, 拆分是将一个完整的项目分成一个个独立的小模块,聚合是将各个模块进一步组合,形成一个完整的项目。接下来简单示例拆分与聚合的过程。 创建父工程 父工程,一个pom工程,目录结构简单,只需有…...

使用uniapp创建小程序和H5界面

uniapp的介绍可以看官网&#xff0c;接下来我们使用uniapp创建小程序和H5界面&#xff0c;其他小程序也是可以的&#xff0c;只演示创建这2个&#xff0c;其实都是一套代码&#xff0c;只是生成的方式不一样而已。 uni-app官网 1.打开HBuilder X 选择如图所示&#xff0c;下…...

密度峰值聚类算法(DPC)

密度峰值聚类算法目录DPC算法1.1 DPC算法的两个假设1.2 DPC算法的两个重要概念1.3 DPC算法的执行步骤1.4 DPC算法的优缺点matlab代码密度计算函数计算delta寻找聚类中心点聚类算法目录 DPC算法 1.1 DPC算法的两个假设 1&#xff09;类簇中心被类簇中其他密度较低的数据点包围…...

RabbitMQ相关问题

文章目录避免重复消费(保证消息幂等性)消息积压上线更多的消费者&#xff0c;进行正常消费惰性队列消息缓存延时队列RabbitMQ如何保证消息的有序性&#xff1f;RabbitMQ消息的可靠性、延时队列如何实现数据库与缓存数据一致&#xff1f;开启消费者多线程消费避免重复消费(保证消…...

Phi-3-vision-128k-instructGPU优化:INT4量化后精度损失<1.2%的实测报告

Phi-3-vision-128k-instruct GPU优化&#xff1a;INT4量化后精度损失<1.2%的实测报告 1. 模型概述 Phi-3-Vision-128K-Instruct 是一个轻量级的开放多模态模型&#xff0c;属于Phi-3模型家族的最新成员。这个模型特别之处在于它同时支持文本和视觉数据的处理&#xff0c;并…...

如何安装配置Goland并使用固定公网地址SSH远程连接本地服务器

文章目录 1. 安装配置GoLand2. 服务器开启SSH服务3. GoLand本地服务器远程连接测试4. 安装cpolar内网穿透远程访问服务器端 4.1 服务器端安装cpolar4.2 创建远程连接公网地址 5. 使用固定TCP地址远程开发 本文主要介绍使用GoLand通过SSH远程连接服务器&#xff0c;并结合cpol…...

3个核心功能解决多平台直播推流痛点:OBS Multi RTMP插件实战指南

3个核心功能解决多平台直播推流痛点&#xff1a;OBS Multi RTMP插件实战指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 在多平台内容分发成为主流的今天&#xff0c;内容创作者面临…...

Phi-3-vision-128k-instructGPU利用率提升:显存复用与KV缓存优化实战

Phi-3-vision-128k-instruct GPU利用率提升&#xff1a;显存复用与KV缓存优化实战 1. 模型概述与部署验证 Phi-3-Vision-128K-Instruct 是一个轻量级的多模态模型&#xff0c;支持128K上下文长度的图文对话。该模型基于高质量的训练数据&#xff0c;经过严格的微调过程&#…...

【隐写术】F5隐写:矩阵编码原理与实战工具解析

1. 隐写术入门&#xff1a;从数字水印到F5算法 第一次接触隐写术是在分析一张看似普通的旅游照片时&#xff0c;发现其中竟然藏着完整的《哈姆雷特》剧本。这种将信息隐藏在载体文件中的技术&#xff0c;就像用隐形墨水书写秘密日记。与加密技术不同&#xff0c;隐写术追求的是…...

LaTeX新手必看:如何避免‘Repeated entry‘报错(附真实案例解析)

LaTeX新手必看&#xff1a;如何避免Repeated entry报错&#xff08;附真实案例解析&#xff09; 在学术写作和技术文档创作中&#xff0c;LaTeX以其专业的排版质量和强大的参考文献管理能力成为众多研究者的首选工具。然而&#xff0c;对于初学者而言&#xff0c;LaTeX的报错信…...

Thinkphp和Laravel框架都支持 博物馆文物科普知识普及系统微信小程序-

目录项目技术支持数据库设计后端API开发微信小程序对接多媒体处理性能优化策略实施路线图可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作项目技术支持 前端开发框架:vue.js 数据库 mysql 版本不限 数据库工具&…...

IT界有哪些优秀的高并发解决方案?

据有关数据表明&#xff0c;现在基本工作年限超过5年的Java开发岗以及各大厂招聘岗位&#xff0c;对于高并发这块内容是必定会考察的。这也就意味着&#xff0c;你想要在今年这个大环境下&#xff0c;找到一份薪水高且发展前景好的岗位&#xff0c;不关基础知识还要有良好的编码…...

打工人上班摸魚小說-第十五章 地铁、跟踪与再也甩不掉的影子

# 打工人上班摸魚小說-第十五章 地铁、跟踪与再也甩不掉的影子---林舟睁开眼的时候&#xff0c;天已经亮了。他不知道自己是什么时候睡着的&#xff0c;只记得看着天花板&#xff0c;看着看着&#xff0c;眼皮就沉了。醒来的时候&#xff0c;阳光从窗帘的缝隙里照进来&#xff…...

个人微信接入龙虾全攻略:官方合规直连,模型运行清晰,新手零门槛上手

个人微信接入龙虾全攻略&#xff1a;官方合规直连&#xff0c;模型运行清晰&#xff0c;新手零门槛上手 近期微信官方开放合规通道&#xff0c;个人微信终于能直接接入OpenClaw&#xff08;俗称“龙虾”&#xff09;&#xff0c;不用再碰违规插件、不用担心里程碑封号风险&…...