基础练习 完美的代价
来源:互联网 发布:kali linux 安装 编辑:程序博客网 时间:2024/05/05 20:42
问题描述
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
第二行是一个字符串,长度为N.只包含小写字母
第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
否则输出Impossible
否则输出Impossible
样例输入
5
mamad
mamad
样例输出
3
#include "stdio.h"#include "string.h"int count=0 ;int zhao(char string[],char c,int start,int end){ int i ; for(i=end-1;i>start;i--) { if(string[i]==c) { return i ; } } return-1 ;}void huan(char string[],int start,int end){ char temp ; int i ; for(i=start;i<end;i++) { count++; temp=string[i]; string[i]=string[i+1]; string[i+1]=temp ; }}int main(){ int n,len,i,t,k=0,l ; char string[8010]; int aaa,bbb ; scanf("%d",&n); getchar(); gets(string); len=strlen(string); aaa=len/2 ; for(i=0,l=len-1;i<=aaa;i++,l--) { if(string[l]!=string[i]) { t=zhao(string,string[i],i,l); //找到相同字母的下标 if(t==-1) { if(len%2==0) { printf("Impossible\n"); return 0 ; } bbb=i ; k++; aaa++; l++; } if(t!=-1) { huan(string,t,l); //换字母,统计次数 } } } if(k>1) { printf("Impossible\n"); } else { if(len%2!=0&&k==1) { huan(string,bbb,len/2); printf("%d\n",count); } else { printf("%d\n",count); } } return 0 ;}
1 0
- 基础练习 完美的代价
- 基础练习 完美的代价
- 基础练习 完美的代价
- 基础练习 完美的代价
- 基础练习 完美的代价
- 基础练习 完美的代价
- 基础练习 完美的代价
- 基础练习 完美的代价
- 蓝桥杯 基础练习 完美的代价
- 蓝桥网 基础练习 完美的代价
- 基础练习 BASIC-19 完美的代价
- 蓝桥杯练习系统:基础练习 完美的代价
- 蓝桥杯 BASIC-19 基础练习 完美的代价
- 蓝桥杯 BASIC-19 基础练习 完美的代价 Java版
- 基础练习 完美的代价(蓝桥杯 字符串问题)
- 蓝桥杯 基础练习 完美的代价 【贪心 + string】
- 蓝桥杯练习(vip) 完美的代价
- 完美的代价解答
- 树剖模板
- 实现超长文本分页显示
- 2016你配得上更好地自己
- opencv下kd树使用笔记
- 在centos 6.5下面安装gcc 4.1.2
- 基础练习 完美的代价
- Python中怎样加入中文
- nose1.3.7文档翻译--5.Testing tools
- Kd-Tree算法原理和开源实现代码
- SpringMVC运用spring表达式出现的异常
- 15个私有云上的DevOps 开源工具
- AngularJS教程:英雄编辑器
- 工厂、单例、模板 一次结合使用
- 树莓派显示器电源管理禁止屏幕休眠