完美的代价
来源:互联网 发布:怎么联系淘宝卖家 编辑:程序博客网 时间:2024/05/17 08:59
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
否则输出Impossible
样例输入
5
mamad
样例输出
3
#include<iostream>#include<string>using namespace std;int main(void){ int n;cin>>n; char *a=new char[n]; cin>>a; int t=n; int c=-1,flag=1,sum=0; for(int i=0;i<t-1;i++){ for(int j=t-1;j>=i;j--){ if(i==j){ if(t%2==0||c!=-1){//总数是偶数或者落单的数不止有一个 flag=0;break; } c=1; //修改成单的数的标识 sum+=n/2-i; //将成单的数交换到中间所需要的次数 break; } if(a[i]==a[j]){ for(int m=j;m<t-1;m++){ a[m]=a[m+1]; //将a[j]后的数往前推进一个单位 } a[t]=a[i]; //将最后一个位置放a[i] sum+=t-j-1; t--; //最后一位往前推一个,排除已经处理的数 break; } } if(flag==0)break; } if(flag==0)cout<<"None"; else cout<<sum; return 0;}
阅读全文
0 0
- 完美的代价解答
- 完美的代价
- 12.完美的代价
- 蓝桥杯 完美的代价
- 完美的代价-题解
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 完美的代价
- 蓝桥杯: 完美的代价
- Android IntentService 可执行耗时任务的Service
- HDU2034 人见人爱A-B
- 重要的Attach
- Fork/Join框架的简单学习和简单demo
- php文件下载
- 完美的代价
- 安装node.js之后的操作
- phpstorm:如何设置代码自动换行
- java集合之HashMap的扩容resize
- 大转盘游戏
- Maven+Spring+Spring MVC+MyBatis+MySQL整合SSM框架
- C++ Socket(二)
- console.log与alert
- Latex公式编号、行内公式、公式内空格、长公式换行、行内连加符号