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

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

例如mamad

第一次交换 ad : mamda

第二次交换 md : madma

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

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

第二行是一个字符串,长度为N.只包含小写字母
输出
如果可能,输出最少的交换次数。

否则输出Impossible
样例输入
5
mamad
样例输出
3
思路:如果发现了单独的字母,也就是没有与它匹配的。
如果n是偶数的话,就肯定不对;
如果n是奇数的话,并且之前出现过这样的,也肯定不对;
并且遇见了这样的情况,不要交换这个字母到它应该有的位置,因为交换之后,有可能别的再交换需要花费更多的代价,例如baamm.
其他的情况就按照首尾对应的方式交换就可以了,这种情况需要交换。
代码如下:

#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;string s,t;
int n;inline int fcs(string c)
{int _min=0;int flag=0;int r;int R=s.length()-1;for(int i=0;i<c.length()/2;i++){r=R;if(c[i]!=c[r]){while(r>i&&c[i]!=c[r]) r--;if(r==i){if(c.length()%2==0) return inf;else if(flag) return inf;else{flag=1;_min+=(c.length()/2-i);//这种情况不需要交换,只需要加上需要付出的代价就行。continue;}}_min+=(R-r);for(int j=r;j<R;j++) swap(c[j],c[j+1]);   //这种情况需要交换位置}R--;}return _min;
}
int main()
{scanf("%d\n\n",&n);cin>>s;t=s;reverse(s.begin(),s.end());int _min=min(fcs(t),fcs(s));if(_min==inf) cout<<"Impossible"<<endl;else cout<<_min<<endl;return 0;
}

努力加油a啊,(o)/~

[蓝桥杯][基础练习VIP]完美的代价(贪心)相关推荐

  1. [蓝桥杯][基础练习VIP]完美的代价-贪心

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

  2. 蓝桥杯 基础练习VIP FJ的字符串 java

    蓝桥杯 基础练习VIP FJ的字符串 java 题目 题目描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = " ...

  3. [蓝桥杯][基础练习VIP]Huffuman树

    题目描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, -, pn-1},用这列数构造Huffman树的过程如下: 找到 ...

  4. 问题 1462: [蓝桥杯][基础练习VIP]Huffuman树

    题目描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0,  p1,  -,  pn-1},用这列数构造Huffman树的过程如下: ...

  5. [蓝桥杯][基础练习VIP]分解质因数

    题目描述 求出区间[a,b]中所有整数的质因数分解. 提示 先筛出所有素数,然后再分解. 数据规模和约定 2< =a< =b< =10000 输入 输入两个整数a,b. 输出 每行输 ...

  6. [蓝桥杯][基础练习VIP]2n皇后问题(深搜)

    输出一个整数,表示总共有多少种放法. 样例输入 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 样例输出 2 思路:数据量不大,就是暴力搜索,先安排一种皇后,然后再安排另一种皇后. ...

  7. [蓝桥杯][基础练习VIP]报时助手

    题目描述 给定当前的时间,请用英文的读法将它读出来. 时间用时h和分m表示,在英文的读法中,读一个时间的方法是: 如果m为0,则将时读出来,然后加上"o'clock",如3:00读 ...

  8. [蓝桥杯][基础练习VIP]分解质因数-质数筛选+模拟+双指针

    题目描述 求出区间[a,b]中所有整数的质因数分解. 提示 先筛出所有素数,然后再分解. 数据规模和约定 输入 输入两个整数a,b. 2< =a< =b< =10000 输出 每行输 ...

  9. [蓝桥杯][基础练习VIP]芯片测试-思维

    题目描述 有n块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏.而用坏芯片测试其他芯片时,会随机给出好或是坏的测试结果(即 ...

最新文章

  1. asp.net如何读取Excel文件
  2. 突然让我想起了以前的面试(转http://blog.163.com/lzy_1920116/blog/)
  3. Python编程基础:第八节 判断语句If Statements
  4. jupyter修改密码后无法启动服务器,搭建jupyter远程连接服务器
  5. c#+mysql图片存数据库_C#图片存入数据库及其读出显示
  6. 字符串指针的地址的传递
  7. 无法定位软件包 docker-ce_自媒体!做自媒体账号需要注意什么?定位很重要
  8. 网站服务器系统组成,linux系统由哪几部分组成_网站服务器运行维护,linux
  9. Deep_Rank,经典ctr系列预估模型复现框架
  10. bzoj 4289 TAX —— 点边转化
  11. ADO.NET数据访问方式:SqlDataReader
  12. 微信红包工具服务器,微信红包 是怎么扛住全球用户的!
  13. 计算智能的三个主要分支及其应用
  14. 傲梅分区助手 linux,傲梅分区助手(详解磁盘操作)
  15. PHP中fileinfo的作用以及怎么开启fileinfo
  16. 如何使用n2disk构建一个100 Gbit(无丢包)连续数据包记录器[Part3]
  17. 多重集合的排列与组合
  18. python exec 返回值_Python exec()用法及代码示例
  19. 计算机word修改文章,Word写报告:查看和修改文章的层次结构-word技巧-电脑技巧收藏家...
  20. 微信开发安卓虚拟键盘挡住输入框的问题

热门文章

  1. Python—实训day9—使用pandas进行数据预处理
  2. IOS之使用AwesomeMenu框架令人惊叹的菜单
  3. linux cacti 搭建,Cacti搭建部署
  4. java 手动事务回滚_JAVA设置手动提交事务,回滚事务,提交事务的操作
  5. bean json转kotlin_Android kotlin插件神器Json直接生成javaBean
  6. .net函数查询_特来电智能分析平台动态查询架构创新实践
  7. ViewController的生命周期分析和使用
  8. html 无效源,IE bug无效源HTML5音频 - 解决方法
  9. Python入门教程 | Python学习的必经阶段
  10. LeetCode 410——分割数组的最大值