蓝桥杯-完美的代价

简介: 完美的代价

roblem Description:


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

交换的定义是:交换两个相邻的字符  

例如mamad  

第一次交换  ad  :  mamda

第二次交换  md  :  madma  

第三次交换  ma  :  madam  (回文!完美!)    


Input:


第一行是一个整数N,表示接下来的字符串的长度(N  < =  8000)

第二行是一个字符串,长度为N.只包含小写字母  


Output:


如果可能,输出最少的交换次数。

否则输出Impossible  


Sample Input:


5

mamad


Sample Output:


3


解题思路:


如果字符串长度是奇数,那么最多只能有一次字符对应不相同,也就是最中间的那个字符;如果字符串长度是偶数,只要有找到一次对应不相同的字符,就不能达到回文串。


程序代码:


#include<iostream>
using namespace std;
int main()
{
    int n;
    string s;
    cin>>n>>s;
    int j=n-1,cnt=0,flag=0;
    for(int i=0;i<j;i++)
    {
        for(int k=j;k>=i;k--)
        {
            if(k==i)
            {
                if(n%2==0||flag==1)
                {
                    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]);
                    cnt++;
                }
                j--;
                break;
            }
        }
    }
    cout<<cnt<<endl;
    return 0;
}
相关文章
|
6月前
|
算法 测试技术 C++
【动态规划】C++ 算法458:可怜的小猪
【动态规划】C++ 算法458:可怜的小猪
|
6月前
|
Java C++ Python
试题 基础练习 完美的代价
试题 基础练习 完美的代价
40 0
|
6月前
|
C++
牛客:最大的差
牛客:最大的差
32 1
|
6月前
|
缓存 索引
从leetCode写题总结的程序优化思路
从leetCode写题总结的程序优化思路
38 0
leetcode-每日一题1200. 最小绝对差
leetcode-每日一题1200. 最小绝对差
103 0
leetcode-每日一题1200. 最小绝对差
|
算法 搜索推荐
|
算法 搜索推荐
# 每日一问——什么是快速排序?如何优化?
快速排序是从冒泡排序演变而来的算法,但是其比冒泡排序要高效,所以叫做快速排序,简单理解如下。
89 0
|
数据采集 存储 算法
算法 | 一听就懂,一写就错,二分查找是送分题还是送命题?
算法 | 一听就懂,一写就错,二分查找是送分题还是送命题?
77 0
算法 | 一听就懂,一写就错,二分查找是送分题还是送命题?
LeetCode每日一题——1200. 最小绝对差
给你个整数数组 arr,其中每个元素都 不相同。
109 0
|
算法 程序员 索引
【算法合集】学习算法第二天(二分与排序篇)
哈喽,大家好,我是程序猿追,通过上一篇算法文的私信,有小伙伴留言说,什么时候更新呀?这不?今天它就来了。
122 0
【算法合集】学习算法第二天(二分与排序篇)