基础练习——完美的代价
2018-06-18 04:02:22来源:未知 阅读 ()
问题描述
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
交换的定义是:交换两个相邻的字符
例如mamad
第一次交换 ad : mamda
第二次交换 md : madma
第三次交换 ma : madam (回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
否则输出Impossible
样例输入
5
mamad
样例输出
3
#include <cstdio> #include <cstdlib> int main() { #ifdef LOCAL freopen("input2.txt", "r", stdin); #endif int n, flag = 0, ans = 0; char *str; scanf("%d", &n); str = (char*)malloc(n * sizeof(char)); scanf("%s", str); int j = n - 1, p = 0; for(int i = 0; i < j; i++) { for(int k = j; k >= 0; k--) { if(k == i) { flag++; if(n % 2 == 0 || flag > 1) { printf("Impossible\n"); return 0; } p = n/2 - i; break; } else if(str[k] == str[i]) { ans += j - k; // printf("ans = %d\n", ans); for(int f = k; f < j; f++) { str[f] = str[f + 1]; } str[j] = str[i]; j--; break; } } } printf("%d\n", ans + p); return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 如何0基础学习C/C++? 2020-06-06
- 复习C++语法--基础篇 2020-05-27
- C++基础 学习笔记六:复合类型之数组 2020-04-25
- C++基础 学习笔记五:重载之运算符重载 2020-04-23
- C++基础 学习笔记四:重载之函数重载 2020-04-22
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash