问题描述
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
否则输出Impossible
样例输入
5
mamad
样例输出
3
分析:过程见代码注释部分。其中有两个注意点:
1.impossible的情况:如果有一个字符出现的次数是奇数次数,而且n是偶数,那么不可能构成回文
如果n是奇数,但是已经有一个字符出现的次数是奇数次数了,那么如果又有一个字符是奇数次数,就不可能构成回文。
2.如果n是奇数,计算中间那个字符交换的次数的时候,不需要模拟把这个数移动到中间去,因为移动到中间的话假设有一对数都在左边或者都在右边,
那么交换成回文的时候就要经过中间,就会每次把cnt多加了1,而这个1是没有必要的,因为可以所有的回文移动完了之后再把这个独立的奇数移动过去,才能保证交换次数最少。

#include <iostream>
using namespace std;
int main() {int n;cin >> n;string s;cin >> s;int j = n - 1;int cnt = 0;//cnt用来统计交换的次数int flag = 0;//flag判断是否已经有一个单独的奇个数的字符了for(int i = 0; i < j; i++) {//i指针从头遍历到倒数第二个字符for(int k = j; k >= i; k--) {//k指针从后面往前一直到i寻找和s[i]相同的s[k]if(k == i) {//如果找不到相同的if(n % 2 == 0 || flag == 1) {//impossible的两种情况cout << "Impossible";return 0;}flag = 1;cnt += n / 2 - i;} else if(s[k] == s[i]) {for(int l = k; l < j; l++) {swap(s[l], s[l+1]);//把s[k]换到s[j]处cnt++;//统计交换次数}j--;break;}}}cout << cnt;return 0;
}

蓝桥杯 BASIC-19 基础练习 完美的代价相关推荐

  1. 蓝桥杯每日一练:完美的代价

    一.题目 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串. 交 ...

  2. 完美的代价 c语言,蓝桥杯基础练习 完美的代价

    基础练习 完美的代价 问题: 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一 ...

  3. 蓝桥杯练习系统 基础练习 全部习题 题目及AC代码(包括VIP试题)C++

    蓝桥杯练习系统 基础练习 全部习题ac代码 看在作者这么肝的份上点个赞吧

  4. 蓝桥杯物联网竞赛基础图文教程——时钟选择

    蓝桥杯物联网竞赛基础图文教程--时钟选择 1什么是时钟 时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令.时钟系统就是CPU的脉搏,决定cpu速率,像人的心跳一样 只有有了心跳,人才 ...

  5. 蓝桥杯练习系统-基础练习34道题解答答案全汇总(c/c++)

    蓝桥杯练习系统BASIC-13 数列排序(c++,利用sort) 蓝桥杯练习系统BASIC-12 十六进制转八进制(c++,利用string) 蓝桥杯练习系统BASIC-11 十六进制转十进制(c++ ...

  6. 蓝桥杯Java必备基础知识总结大全【3W字】持续更新中

    本文会持续更新,如果对您有帮助的话可以点点关注,双击 本人2021年蓝桥杯C++B组国二,今年转战Java,并整理此文,希望能够对大家有所帮助,第一次写这么长的文章,可能有的地方写的不是很好,还请大家 ...

  7. 【蓝桥杯】 《3W字数总结》 蓝桥杯Java必备基础知识以及国赛真题解析

    本文会持续更新,如果对您有帮助的话可以点点关注,双击 本人2021年蓝桥杯C++B组国二,今年转战Java,并整理此文,希望能够对大家有所帮助,第一次写这么长的文章,可能有的地方写的不是很好,还请大家 ...

  8. 蓝桥杯学习记录-基础练习

    注:每天都更新哦~,题目下面的代码都是经过测试正确的,欢迎有更好算法的大神指正,我会把您的代码也附上,相互学习. 蓝桥杯-基础练习:所有题 十六进制转八进制 进制转换 字符 循环 十六进制转十进制 进 ...

  9. 蓝桥杯练习系统-基础练习

    题库截止至 2020-7-28 早就做完了,重新做一遍水下题,做到哪发到哪. BASIC-1 闰年判断 问题描述 给定一个年份,判断这一年是不是闰年. 当以下情况之一满足时,这一年是闰年: 1. 年份 ...

  10. 精选蓝桥杯省赛基础题解2015-2022

    相关链接:蓝桥杯省赛历年真题解2015-2022 蓝桥杯比赛中,可以使用的语言有C/C++,Java和Python. 程序的关键在于编程技巧.数据结构和算法,所以这里的题解均用C/C++语言来写. 参 ...

最新文章

  1. PyQt标准框——QInputDialog(二)
  2. An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中一种基于蚁群算法的能量有效路由)
  3. admin.php wordpress,wordpress 中使用自带 admin-ajax.php
  4. Python+pillow计算椭圆图形几何中心
  5. 使用 Segue 傳送選取的 Table Cell 內容到下一個 View
  6. Android MVP架构搭建
  7. (UE4 4.20)UE4 碰撞(Collision)之光线检测(RayTrace )
  8. TI 参考设计 采用高分辨率位置插值的正弦/余弦编码器的接口
  9. 三.Java基本语法
  10. 消除“Permission is only granted to system apps”错误
  11. 如何快速搭建个人网站
  12. 来曲唑十二烷基硫酸钠/苯丁酸氮芥/层状双金属氢氧化物纳米杂化物
  13. 边缘提取——Prewitt算子和Sobel算子
  14. 【大数据监控】Prometheus、Node_exporter、Graphite_exporter安装部署详细文档
  15. 豆瓣电台WP7客户端 开发记录1
  16. color a dir/s_2级绘本(A)Lesson 25:Kipper扮演小丑
  17. 关于武汉蔡甸•九真山第三届登山节活动临时暂停致歉全体参赛及相关工作人员的一封信!
  18. Android使用SwipeRefreshLayout实现下拉刷新
  19. 教你轻松构建asp.net网站框架
  20. solidworks齿轮编辑_SolidWorks在齿轮建模中的应用心得

热门文章

  1. 编写可复用的自定义按钮
  2. 使用 AppFuse 快速构建 J2EE 应用
  3. Java 面向对象 之 封装方法
  4. Python 获取 网卡 MAC 地址
  5. Linux 常用名利总结
  6. clone oracle ebs
  7. 主流存储设备的现状和优缺点分析
  8. 少有人挖但仍可获得奖金的10类Web 漏洞(下)
  9. HackerOne漏洞奖励计划扩展至开源漏洞
  10. Go sync.Map 看一看