蓝桥杯 基础训练 完美的代价(转)

2024-02-03 23:58

本文主要是介绍蓝桥杯 基础训练 完美的代价(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:http://blog.csdn.net/houheshuai/article/details/41253193


基础练习 完美的代价  
时间限制:1.0s   内存限制:512.0MB
       
问题描述
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
  交换的定义是:交换两个相邻的字符
  例如mamad
  第一次交换 ad : mamda
  第二次交换 md : madma
  第三次交换 ma : madam (回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
  第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
  否则输出Impossible
样例输入
5
mamad
样例输出
3

分析:

贪心思想,从左向右遍历,对于当前字符,从最右边向左遍历,找到与当前字符相同的,把它移动到正确位置,累加步数。

如果字符串长度为偶数,只要有一个无法配对的字符,就不能变成回文串,若为奇数,只要出现两个无法配对的字符,也不能。

代码:

[cpp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <algorithm>  
  4. #include <cstring>  
  5. #include <cctype>  
  6. #define For1(i, a, b) for(int i = a; i <= b; i++)  
  7. #define For2(i, a, b) for(int i = a; i >= b; i--)  
  8. using namespace std;  
  9.   
  10. int main()  
  11. {  
  12.     //freopen("in.txt", "r", stdin);  
  13.     char ch[8010];  
  14.     int n, sum = 0, ok = 1, c = -1;  
  15.     scanf("%d%s", &n, ch);  
  16.     int j = n - 1;  
  17.     For1(i, 0, j-1){        //从左向右依次判断  
  18.         For2(k, j, i){      //从最右边查找,看有无与当前字符相同的  
  19.             if(k == i){     //没有找到与ch[i]相同的字符  
  20.                 if(n % 2 == 0 || c != -1){      //若n为偶数或ch[i]不是唯一无法匹配的字符  
  21.                     ok = 0;  
  22.                     break;  
  23.                 }  
  24.                 c = 1;              //n为奇数,ch[i]为第一个无法匹配的字符  
  25.                 sum += n / 2 - i;       //将它移到中间所需步数  
  26.                 break;  
  27.             }  
  28.             if(ch[k] == ch[i]){         //找到相同的  
  29.                 For1(t, k, j - 1) ch[t] = ch[t + 1];        //往后移到对称位置  
  30.                 sum += j - k;  
  31.                 j--;  
  32.                 break;  
  33.             }  
  34.         }  
  35.         if(!ok) break;  
  36.     }  
  37.     if(!ok) printf("Impossible\n");  
  38.     else printf("%d\n", sum);  
  39.     return 0;  
  40. }  

这篇关于蓝桥杯 基础训练 完美的代价(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/675816

相关文章

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

C语言蓝桥杯

一、语言基础 竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_s

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决 问题描述 最近在投一篇期刊论文,直接提交word文档,当时没有查看提交预览,一审审稿意见全是:公式乱码、公式乱码、乱码啊!!!是我大意了,第二次提交,我就决定将word文档转成PDF后再提交,避免再次出现公式乱码的问题。接着问题又来了,我利用‘文件/导出’或‘文件/另存为’的方式将word转成PDF后,发现公式

开发高质量的java代码;实现完美的人生

一、代码质量差表现在哪些方面: (1)可读性:函数命名随意,实现逻辑混乱,代码格式不规范。 (2)可靠性:程序运行不稳定,bug太多。 (3)维护性:代码逻辑没有层次,混成一团,很难维护改进。 (4)移植性、重用性:许多人写的代码,只能自己使用,很少有能共享的功能性代码。 (5)高效性:很少从算法、资源占用、执行效率等角度去考虑,经常导致软件性能问题。 二、解决方法(个人角度) (1)要

SQLException: No Suitable Driver Found - 完美解决方法详解

🚨 SQLException: No Suitable Driver Found - 完美解决方法详解 🚨 **🚨 SQLException: No Suitable Driver Found - 完美解决方法详解 🚨****摘要 📝****引言 🎯****正文 📚****1. 问题概述 ❗****2. JDBC 驱动程序的工作原理 🔧****3. 错误的根本原因 🕵️**

“设计模式双剑合璧:工厂模式与策略模式在支付系统中的完美结合”

工厂模式(Factory Pattern)和策略模式(Strategy Pattern)都是常见的设计模式,但它们解决的问题和应用场景不同。下面是它们的区别: 1. 目的不同: 工厂模式(Factory Pattern): 工厂模式的主要目的是创建对象。它通过定义一个创建对象的接口,让子类决定实例化哪一个具体类,从而将对象创建的逻辑与使用的代码分离。 工厂模式可以分为简单工厂、工厂方法和抽象

找不同-第15届蓝桥省赛Scratch初级组真题第4题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第183讲。 如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。 第15届蓝桥杯省赛已于2024年8月24日落下帷幕,编程题一共有5题,分别如下: 猪八戒落地 游乐场 画西瓜 找不同 消

【蓝桥杯嵌入式(一)程序框架和调度器】

蓝桥杯嵌入式(一)程序框架和调度器 序、代码命名规则零、STM32和8051⼀、软件及环境安装⼆、⼯程框架搭建1.时钟配置2、SYS配置3、⼯程配置4、NVIC配置5.、Keil配置 三、系统初始化四、任务调度器 链接: 视频出处 序、代码命名规则 以下是一些常见的举例 零、STM32和8051 链接: 8位和32位单片机最本质区别 ⼀、软件及环境安装

【蓝桥杯嵌入式(二)Led、Key、Lcd】

蓝桥杯嵌入式(二)Led、Key、Lcd 五、Led模块1.原理图配置2. 知识点3.底层代码 六、Key模块1.原理图配置2.知识点3.底层代码底层代码(四⾏代码版本)底层代码(状态机版本) 七、LCD模块1.原理图配置2.知识点底层代码 五、Led模块 1.原理图配置 2. 知识点 链接: 上拉电阻的通俗解释 链接: 单⽚机怎么输出⾼电平!推挽输出和开

Spring回顾之五 —— 测试,JUnit与SpringTest的完美结合

没有测试的程序,是不完整的,每一个从事写程序的人员,都应该坚持做单元测试,通过单元测试可以验证程序基本功能的有效性,从而保证整个系统的质量,功在一时,利在千秋。这里我们将尝试使用Junit和SpringTest,在之前的系统里添加测试功能。 第一步:JUnit与SpringTest的引入     JUnit故名知意,是一个专门为Java语言提供单元测试的框架。平时的开发过程中,单元