当前位置: 首页 > 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;开启消费者多线程消费避免重复消费(保证消…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...