ACMNO.50 完美的代价(主要是不同情况下面的讨论)

网友投稿 854 2022-11-20

ACMNO.50 完美的代价(主要是不同情况下面的讨论)

ACMNO.50 完美的代价(主要是不同情况下面的讨论)

题目描述

回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda 第二次交换 md : madma 第三次交换 ma : madam (回文!完美!)

输入

第一行是一个整数N,表示接下来的字符串的长度(N < = 8000) 第二行是一个字符串,长度为N.只包含小写字母

输出

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

样例输入

5mamad

样例输出

3

来源/分类

蓝桥杯—基础训练

思路:

主要是不同情况下面的讨论,例如、abcd,aabb,abad,这个是偶数的代表。思考出现impossible的条件。应当列就是出所有可以出现的情况。其他解释,集合代码里面有。

代码:

#include#includeusing namespace std;int main(){ string a="";int n; cin>>n;cin>>a; int i,j,t,l;j=n-1;//获取最后一个坐标 int flag=0; int step=0;//获取移动步数 for(i=0;i1) /*譬如,abcd就是N是4.这个是没希望的。 但是aabb也是偶数,但是却可以。所以要分情况讨论*/ { printf("Impossible"); return 0; } step+=n/2-i;//移动步数 continue; /*计算机术语,表示结束本次循环,而不终止整个循环的执行。 而是结束本次循环,进行下一次循环。 */ } if(a[i]==a[t])//找寻到一样的,就通过一个临时变量来交换位置。 { step+=j-t;//累加移动步数,就是最后一个元素位置。减去所找到匹配的元素的位置。 temp=a[t];//提前保存好,后面将要消失的元素数值 for(l=t;l

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MATLAB_no.3:关于车牌的.
下一篇:Springboot配置图片虚拟映射示例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~