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

Swap and Reverse 题解

Swap and Reverse

题面翻译

题目描述

本题共有 t t t 组数据。

给定一个长度为 n n n 的字符串 s s s 和一个整数 k k k s s s 只包含小写字母,你可以进行若干次操作(可以是零次),具体操作如下:

  • 选取一个 i i i 1 ≤ i ≤ n − 2 1\le i\le n-2 1in2),交换 a i a_i ai a i + 2 a_{i+2} ai+2

  • 选取一个 i i i 1 ≤ i ≤ n − k + 1 1\le i\le n-k+1 1ink+1),翻转区间 s [ i , i + k − 1 ] s_{[i,i+k-1]} s[i,i+k1]。如果 s = s 1 , s 2 , … , s i − 1 , s i , s i + 1 , … , s i + k − 2 , s i + k − 1 , s i + k , … , s n − 1 , s n s=s_1,s_2,\dots,s_{i-1},s_i,s_{i+1},\dots,s_{i+k-2},s_{i+k-1},s_{i+k},\dots,s_{n-1},s_n s=s1,s2,,si1,si,si+1,,si+k2,si+k1,si+k,,sn1,sn,可将其改为: s = s 1 , s 2 , … , s i − 1 , s i + k − 1 , s i + k − 2 , … , s i + 1 , s i , s i + k , … , s n − 1 , s n s=s_1,s_2,\dots,s_{i-1},s_{i+k-1},s_{i+k-2},\dots,s_{i+1},s_i,s_{i+k},\dots,s_{n-1},s_n s=s1,s2,,si1,si+k1,si+k2,,si+1,si,si+k,,sn1,sn

输出经过若干次操作后得到的的按字典顺序排列的最小字符串。

输入格式

第一行包含一个正整数 t t t,具体含义见上。

第二行包含两个正整数 n n n k k k

接下来一行 包含一个长度为 n n n 的字符串 s s s

输出格式

对于每个测试用例,在进行若干次操作后输出按字典顺序排列的最小字符串。

数据范围

1 ≤ t ≤ 1 0 4 , 1 ≤ k ≤ n ≤ 1 0 5 1\le t\le10^4,1\le k\le n\le10^5 1t104,1kn105

Translate by @Moss_spresd

题目描述

You are given a string $ s $ of length $ n $ consisting of lowercase English letters, and an integer $ k $ . In one step you can perform any one of the two operations below:

  • Pick an index $ i $ ( $ 1 \le i \le n - 2 $ ) and swap $ s_{i} $ and $ s_{i+2} $ .
  • Pick an index $ i $ ( $ 1 \le i \le n-k+1 $ ) and reverse the order of letters formed by the range $ [i,i+k-1] $ of the string. Formally, if the string currently is equal to $ s_1\ldots s_{i-1}s_is_{i+1}\ldots s_{i+k-2}s_{i+k-1}s_{i+k}\ldots s_{n-1}s_n $ , change it to $ s_1\ldots s_{i-1}s_{i+k-1}s_{i+k-2}\ldots s_{i+1}s_is_{i+k}\ldots s_{n-1}s_n $ .

You can make as many steps as you want (possibly, zero). Your task is to find the lexicographically smallest string you can obtain after some number of steps.

A string $ a $ is lexicographically smaller than a string $ b $ of the same length if and only if the following holds:

  • in the first position where $ a $ and $ b $ differ, the string $ a $ has a letter that appears earlier in the alphabet than the corresponding letter in $ b $ .

输入格式

Each test contains multiple test cases. The first line contains the number of test cases $ t $ ( $ 1 \le t \le 10^4 $ ). The description of the test cases follows.

The first line of each test case contains two integers $ n $ and $ k $ ( $ 1 \le k < n \le 10^5 $ ).

The second line of each test case contains the string $ s $ of length $ n $ consisting of lowercase English letters.

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

输出格式

For each test case, print the lexicographically smallest string after doing some (possibly, zero) steps.

样例 #1

样例输入 #1

5
4 2
nima
5 3
panda
9 2
theforces
7 3
amirfar
6 4
rounds

样例输出 #1

aimn
aandp
ceefhorst
aafmirr
dnorsu

提示

In the first test case, we can obtain the string “aimn” using the following operations:

  1. Reverse the range $ [3,4] $ . The string turns into “niam”.
  2. Swap $ s_1 $ and $ s_3 $ . The string turns into “ainm”.
  3. Reverse the range $ [3,4] $ . The string turns into “aimn”.

It can be proven that we cannot obtain any string lexicographically smaller than “aimn”. Therefore, “aimn” is the answer.

In the second test case, we can obtain the string “aandp” using the following operations:

  1. Swap $ s_3 $ and $ s_5 $ . The string turns into “paadn”.
  2. Swap $ s_1 $ and $ s_3 $ . The string turns into “aapdn”.
  3. Swap $ s_3 $ and $ s_5 $ . The string turns into “aandp”.

It can be proven that we cannot obtain any string lexicographically smaller than “aandp”. Therefore, “aandp” is the answer.

题目大意

两种操作后,能得到的字典序排列最小的字符串

解题思路

观察这两种操作

  • 交换 a i a_{i} ai 和 $ a_{i+2} $ 可以得出此操作为交换距离为 2 2 2 的位数操作,即偶数位可以互换,

奇数位可以互换。

  • 此时我们观察第二种操作,选取一个 i i i 1 ≤ i ≤ n − k + 1 1\le i\le n-k+1 1ink+1),翻转区间 s [ i , i + k − 1 ] , s_{[i,i+k-1]}, s[i,i+k1],

    s = s 1 , s 2 , s i − 1 , s i , s i + 1 , , ˙ s i + k − 2 , s i + k − 1 , s i + k , … , s n − 1 , s n s=s_1,s_2,s_{i-1},s_i,s_{i+1},\dot,s_{i+k-2},s_{i+k-1},s_{i+k},\dots,s_{n-1},s_n s=s1,s2,si1,si,si+1,,˙si+k2,si+k1,si+k,,sn1,sn

    s = s 1 , s 2 , s i − 1 , s i + k − 1 , s i + k − 2 , … , s i + 1 , s i , s i + k , … , s n − 1 , s n s=s_1,s_2,s_{i-1},s_{i+k-1},s_{i+k-2},\dots,s_{i+1},s_i,s_{i+k},\dots,s_{n-1},s_n s=s1,s2,si1,si+k1,si+k2,,si+1,si,si+k,,sn1,sn

    • k k k 为偶数的时候,第二种操作就可以交换距离为奇数的字符,那么结合第一

    种操作,我们就可以交换偶数与偶数,奇数与奇数,偶数与奇数,奇数与偶数的

    字符了,那么我们直接 $sort\left ( \right ) $ 排序即可。

    • k k k 为奇数的时候,只能交换距离为偶数的字符,也就是说只能交换奇数与奇

    数,偶数与偶数位置的字符了,所以我们分别针对 n n n 的奇偶性分别排序输出即可

#include<bits/stdc++.h>
using namespace std;
const  int N=1e5+10;
int t;
char s[N];  //存储原始字符
char j[N],o[N]; //分别存储奇数与偶数位的字符
int main()
{cin>>t;while(t--){int n=0,k=0;int l=0,u=0;   //分别记录偶数与奇数的数量cin>>n>>k>>s;if(k%2==0){sort(s,s+n);cout<<s<<endl;}else {if(n%2==0){for(int i=0;i<n;i++){if((i+1)%2==0)o[l++]=s[i];else j[u++]=s[i];}sort(o,o+l);sort(j,j+u);for(int i=0;i<l;i++) cout<<j[i]<<o[i];cout<<endl;}else {for(int i=0;i<n;i++){if((i+1)%2==0)o[l++]=s[i];else j[u++]=s[i];//奇数}sort(o,o+l);sort(j,j+u);for(int i=0;i<l;i++) cout<<j[i]<<o[i];cout<<j[u-1];cout<<endl;}}}return 0;
}

相关文章:

Swap and Reverse 题解

Swap and Reverse 题面翻译 题目描述 本题共有 t t t 组数据。 给定一个长度为 n n n 的字符串 s s s 和一个整数 k k k&#xff0c; s s s 只包含小写字母&#xff0c;你可以进行若干次操作&#xff08;可以是零次&#xff09;&#xff0c;具体操作如下&#xff1a; 选…...

单元测试:优雅编写Kotlin单元测试

一、MockK简介 MockK是一款功能强大、易于使用的Kotlin mocking框架。在编写单元测试时&#xff0c;MockK能够帮助我们简化代码、提高测试覆盖率&#xff0c;并改善测试的可维护性。除了基本用法外&#xff0c;MockK还提供了许多额外的功能和灵活的用法&#xff0c;让我们能够…...

深度学习入门教学——卷积神经网络CNN

目录 一、CNN简介 一、输入层 二、卷积层 三、池化层 四、全连接层 一、CNN简介 1、应用领域 检测任务 分类与检索 超分辨率重构 2、卷积网络与传统网咯的区别 传统神经网络和卷积神经网络都是用来提取特征的。神经网络&#xff1a; 可以将其看作是一个二维的。卷积神经…...

【MySQL】MySQL系统变量(system variables)列表(mysqld --verbose --help的结果例)

文章目录 【MySQL】MySQL系统变量&#xff08;system variables&#xff09;列表&#xff08;mysqld --verbose --help的结果例&#xff09;mysqld --verbose --help的结果例参考 【免责声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何公司无关。 编辑|SQL和…...

Python学习之四 数据输入与输出

(一) 脚本编程 前面的章节,组要学习了一些简单的Python编程,使用的是交互式解释器,本章节将开始进行脚本编程。可以使用多种编辑器或者IDE完成编码,主要使用vim。 参考前续小节的写法,我们给a、b分别赋值3和5。 在终端运行程序后发现,没有任何输出。这就是本次我们将要…...

VBA技术资料MF51:VBA_在Excel中突出显示唯一值

【分享成果&#xff0c;随喜正能量】世间万物&#xff0c;因果循环不休&#xff0c;你的善心善行&#xff0c;都可能成为你的善缘善果。每天忆佛念佛&#xff0c;每天都在佛菩萨的加持下生活&#xff0c;自然吉祥如意&#xff0c;法喜充满。 。 我给VBA的定义&#xff1a;VBA是…...

Mqtt学习笔记--交叉编译移植(1)

简述 Mqtt目前在物联网行业的应用比较多&#xff0c;mqtt属于应用层的一个中间件&#xff0c;这个中间件实现消息的订阅发布机制。网上介绍Mqtt的实现原来的比较多&#xff0c;这里不细介绍。 其实在我们之前的产品中&#xff0c;自己也开发的有类似的中间件&#xff0c;除了具…...

Gateway的服务网关

Gateway服务网关 Gateway网关是我们服务的守门神&#xff0c;所有微服务的统一入口。 网关的核心功能特性&#xff1a; 请求路由 权限控制 限流 架构如下&#xff1a; gateway使用 引入依赖 创建gateway服务&#xff0c;引入依赖 <!--网关--> <dependency>…...

信息化发展18

存储技术 1 、存储分类 2 、常用存储模式的技术与应用对比&#xff1a; ( 1 &#xff09; 存储虚拟化&#xff08; Storage Virtualization &#xff09; 是“ 云存储” 的核心技术之一。 它带给人们直接的好处是提高了存储利用率&#xff0c; 降低了存储成本&#xff0c; 简…...

TypeScript学习 + 贪吃蛇项目

TypeSCript简介 TypeScript是JavaScript的超集。它对JS进行了扩展&#xff0c;向JS中引入了类型的概念&#xff0c;并添加了许多新的特性。TS代码需要通过编译器编译为JS&#xff0c;然后再交由JS解析器执行。TS完全兼容JS&#xff0c;换言之&#xff0c;任何的JS代码都可以直…...

YOLO-NAS详细教程-介绍如何进行物体检测

对象检测是计算机视觉中的一项核心任务,可以检测和分类图像中的边界框。自从深度学习首次取得突破以来,它就以极快的速度获得普及和普及,并推动了医疗领域、监控、智能购物等众多公司的发展。考虑到它最终满足了两个基本需求,这一点也就不足为奇了端到端方式:找到所有当前…...

容器没有命令时,如何查看进程、容器executable file not found in $PATH: unknown

前言 当容器没有ps -ef命令时&#xff0c;可以通过以下的命令来查看容器的进程。 docker container top查看容器运行的进程&#xff08;该命令很有用&#xff09; #docker container top 命令用于查看容器运行的进程 #当容器里面没有ps -ef命令时&#xff0c;使用docker con…...

如何使用 Amazon EMR 在 Amazon EKS 上构建可靠、高效、用户友好的 Spark 平台

这是 SafeGraph 技术主管经理 Nan Zhu 与亚马逊云科技高级解决方案架构师 Dave Thibault 共同撰写的特约文章。 SafeGraph 是一家地理空间数据公司&#xff0c;管理着全球超过 4100 万个兴趣点&#xff08;POI&#xff0c;Point of Interest&#xff09;&#xff0c;提供品牌隶…...

国产IDE如何获得捐赠和风险投资

有人在开发VB6 脚本工具&#xff0c;有人在开发VB6的插件&#xff0c;把VB6变成VSCODE界面模式&#xff0c;再加上NUGET&#xff0c;NPM等包管理器原理的在线组件、源码下载功能。 还有TWINBASIC几乎80%代替了VB6&#xff0c;radbasic一直封闭&#xff0c;听说也收到了不少众筹…...

【数学建模】清风数模正课5 相关性分析

相关系数 相关性分析的关键是计算相关系数&#xff0c;在本节课中将会介绍两种常用的相关系数&#xff1a;皮尔逊相关系数&#xff08;Pearson&#xff09;和斯皮尔曼相关系数&#xff08;Spearman&#xff09;。 它们可以用来衡量两个变量间相关性的大小&#xff0c;对于不同…...

Java设计模式:一、六大设计原则-03:里氏替换原则

文章目录 一、定义&#xff1a;里氏替换原则1.1 里氏替换原则1.2 里氏替换原则的作用 二、模拟场景&#xff1a;里氏替换原则三、违背方案&#xff1a;里氏替换原则3.1 工程结构3.2 储蓄卡和信用卡3.2.1 储蓄卡3.2.2 信用卡 3.3 单元测试3.3.1 储蓄卡测试3.3.2 信用卡测试 四、…...

jmeter 固定定时器

固定定时器&#xff08;Constant Timer&#xff09;是一个定时器元件&#xff0c;可以在线程组中的每个线程之间添加固定的延迟时间。固定定时器会对每个线程的执行进行一定的暂停。 聊一下和线程组中的调度器对线程组执行时长的影响&#xff1a; 相同&#xff1a; 都会影响线…...

【微服务部署】07-调用链追踪

文章目录 集成SkyWalking实现调用链追踪1. SkyWalking架构图2. 代码集成SkyWalking 集成SkyWalking实现调用链追踪 1. SkyWalking架构图 Receiver是SkyWalking的入口&#xff0c;支持gRPC和HTTP协议。 SkyWalking内部有分析和查询两个部分 存储方面SkyWalking支持Elasticsearc…...

【C++入门】命名空间、缺省参数、函数重载、引用、内联函数

​&#x1f47b;内容专栏&#xff1a; C/C编程 &#x1f428;本文概括&#xff1a; C入门学习必备语法 &#x1f43c;本文作者&#xff1a; 阿四啊 &#x1f438;发布时间&#xff1a;2023.9.3 前言 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加…...

c++ 学习之 构造函数的使用规则

上规则 // 默认情况下&#xff0c;c 编译器至少给一个类添加三个函数 //1.默认构造函数&#xff08;无参&#xff0c;函数体为空&#xff09; //2.默认析构函数 &#xff08;无参 &#xff0c;函数体为空&#xff09; //3.默认拷贝函数&#xff0c;对其属性进行值拷贝 //构…...

从手术室到移动端:iMedSTAM交互式视频分割模型实战,5分钟搭建你的低延迟医学分析原型

从手术室到移动端&#xff1a;iMedSTAM交互式视频分割模型实战&#xff0c;5分钟搭建你的低延迟医学分析原型 在腹腔镜手术中&#xff0c;外科医生常常需要在实时视频流中快速定位关键解剖结构。传统AI模型往往需要完整视频输入和离线处理&#xff0c;而iMedSTAM的"随时预…...

NEURAL MASK RMBG-2.0技术演进:从RMBG-1.0到ART-ENGINE的架构升级

NEURAL MASK RMBG-2.0技术演进&#xff1a;从RMBG-1.0到ART-ENGINE的架构升级 1. 背景与挑战 传统的图像抠图工具在面对复杂场景时往往力不从心。当遇到细微的发丝、半透明物体或者复杂的光影交错时&#xff0c;这些工具要么产生锯齿状的边缘&#xff0c;要么无法准确区分主体…...

Graphormer实战:输入SMILES字符串,5分钟获取分子属性预测结果

Graphormer实战&#xff1a;输入SMILES字符串&#xff0c;5分钟获取分子属性预测结果 1. 为什么选择Graphormer进行分子属性预测 在药物发现和材料科学领域&#xff0c;准确预测分子属性是核心挑战之一。传统方法通常需要复杂的实验或耗时的计算模拟&#xff0c;而Graphormer…...

Pixel Couplet Gen 嵌入式设备部署探索:在边缘计算场景的应用

Pixel Couplet Gen 嵌入式设备部署探索&#xff1a;在边缘计算场景的应用 1. 边缘计算时代的轻量化AI需求 随着智能终端设备普及&#xff0c;越来越多的场景需要本地化AI能力。想象一下&#xff0c;春节期间走进一家智能家居体验店&#xff0c;门口的电子屏能实时为你生成个性…...

用OpenCV 4.8.0和C++从零搭建增量式三维重建系统:手把手教你处理多张图片生成稀疏点云

从零构建三维视觉系统&#xff1a;OpenCV与C实战指南 三维重建技术正在改变我们与数字世界的交互方式。想象一下&#xff0c;仅用手机拍摄的几张照片就能重建出物体的三维模型——这正是计算机视觉领域最激动人心的应用之一。本文将带你深入OpenCV 4.8.0的底层实现&#xff0c;…...

AI编程赋能研发效率:核心能力与实践经验总结

作为常年泡在代码里的开发者&#xff0c;想必大家都有过这样的体验&#xff1a;用AI插件补几行代码很快&#xff0c;但一到实际项目&#xff0c;环境配置、多任务并行、代码审查这些环节还是得靠人工一点点磨&#xff1b;不同的AI编程能力各有优势&#xff0c;切换适配却十分繁…...

【实战技巧】利用rclone高效下载Google Drive共享大数据集

1. 为什么需要rclone下载Google Drive大数据集 做深度学习的朋友们应该都遇到过这样的场景&#xff1a;好不容易找到一个理想的开源数据集&#xff0c;结果发现它存放在Google Drive上&#xff0c;而且体积动辄几十GB甚至上百GB。这时候如果按照传统方法先下载到本地电脑再上传…...

SolidWorks插件发布踩坑实录:从RegAsm报错到安装包权限,我的C#二次开发交付心得

SolidWorks插件发布全流程避坑指南&#xff1a;从代码签名到权限管理的实战经验 第一次看到自己开发的SolidWorks插件在同事电脑上成功加载时&#xff0c;那种成就感难以言喻。但在此之前&#xff0c;我经历了无数次"为什么在我机器上能运行&#xff0c;到他那里就报错&qu…...

如何构建现代化博客系统:从Markdown到动态页面的完整指南

如何构建现代化博客系统&#xff1a;从Markdown到动态页面的完整指南 【免费下载链接】skateshop An open source e-commerce skateshop build with everything new in Next.js. 项目地址: https://gitcode.com/gh_mirrors/sk/skateshop 在当今数字化时代&#xff0c;拥…...

Ruby开发工具JetBrains RubyMine

链接&#xff1a;https://pan.quark.cn/s/6d78ff88b12eJetBrains RubyMine是一个全新的为Ruby 和 Rails开发者准备的代码编辑器 &#xff0c;对于Ruby这种比较新兴的编程语言&#xff0c;如果你是Ruby的爱好者&#xff0c;不妨试试使用它作为你的开发工具。软件是建立在IntellJ…...