7-7 完美的代价 (50 分)

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

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

例如mamad

第一次交换 ad : mamda

第二次交换 md : madma

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

输入格式:

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

第二行是一个字符串,长度为N.只包含小写字母

输出格式:

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

否则输出Impossible

输入样例:

5
mamad

输出样例:

3

#include<iostream>
#include<algorithm>
using namespace std;
int has[1009];
char s[100009];
int vis[100009];
int t;

int change(int x,int to){
    int ans=0;
    while(x!=to){
        swap(s[x],s[x+1]);
        ans++;
        x++;
    }
    return ans;
}

int find(int x,char a){
    for(int i=x;i;i--){
        if(s[i]==a) return i;
    }
    return 0;
}

int main(){
    scanf("%d",&t);
    scanf("%s",s+1);
    for(int i=1;i<=t;i++) has[s[i]]++;
    int ji=0;
    int jict=0;
    char jizf;
    for(int i=‘a‘;i<=‘z‘;i++){
        if(has[i]%2==1){
            ji++;
            jict=has[i];
            jizf=i;
            }
    }
    if(ji>1){
        cout<<"Impossible"<<endl;
        return 0;
    }
//    for(int i=1;i<=t/2;i++){
//        if(s[i]==jizf){
//            if(jict==1){
//
//                break;
//            }
//            else jict-=2;
//        }
//    }
        int ans=0;
        for(int i=1;i<=t/2;i++){
            int tem=find(t-i+1,s[i]);
            if(tem==i){
                for(int j=1;j<=t/2;j++){
                    swap(s[j],s[t-j+1]);
                }
                i--;
            }
            else{
                ans+=((t-i+1)-tem);
                change(tem,t-i+1);
            }
        }
        cout<<ans<<endl;
} 

注意通过移动,奇数字符位置可能改变。

所以边处理边判断

原文地址:https://www.cnblogs.com/ellery/p/11707965.html

时间: 2024-11-12 13:28:24

7-7 完美的代价 (50 分)的相关文章

蓝桥杯 基础练习 BASIC-19 完美的代价

基础练习 完美的代价 时间限制:1.0s   内存限制:512.0MB 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串. 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda 第二次交换 md : madma 第三次交换 ma : madam (回文!完美!) 输入格式 第一行是一个整数N,表示接下来的字符串的长度(N <= 80

C语言 &#183; 完美的代价

基础练习 完美的代价 时间限制:1.0s   内存限制:512.0MB 锦囊1 使用贪心算法. 锦囊2 从左到右枚举每个字符,移动对应字符.个数为单的字符放中间. 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串. 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda 第二次交换 md : madma 第三次交换 ma : mada

第二部分:简答题(每题5分,共50分)

第二部分:简答题(每题5分,共50分) 1.写出在DNS服务器主配置文件中配置根提示的指令块.   zone "."IN       {        type hint;        file "named.ca; };   2.简述使用代理服务器和NAT上网的区别.           3.简述查看并设置本机默认网关的步骤.    route –n   [[email protected] 桌面]# vim /etc/sysconfig/network-scripts/

洛谷 洛谷 P1011 车站 Label:续命模拟QAQ 未知50分

题目描述 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起(包括第3站)上.下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律.现给出的条件是:共有N个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车).试问x站开出时车上的人数是多少? 输入输出格式 输入格式:

用1分,5分,10分,25分,50分硬币凑成一元,总共有几种组合办法?(SQL 谜题)

早在ITPUB中看过有个SQL高手,喜欢出谜题,以下是一个谜题.我试用SQL SERVER解决此问题. 用1分,5分,10分,25分,50分硬币凑成一元,总共有几种组合办法? SELECT'1*'+rtrim(a.number) +'+5*'+rtrim(b.number) +'+10*'+rtrim(c.number) +'+25*'+rtrim(d.number) +'+50*'+rtrim(e.number)AS result FROM(select number from master.

蓝桥杯_基础训练_完美的代价(贪心)

基础练习 完美的代价 时间限制:1.0s   内存限制:512.0MB 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串. 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda 第二次交换 md : madma 第三次交换 ma : madam (回文!完美!) 输入格式 第一行是一个整数N,表示接下来的字符串的长度(N <= 80

[BASIC-19] 完美的代价

基础练习 完美的代价 时间限制:1.0s   内存限制:512.0MB 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串. 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda 第二次交换 md : madma 第三次交换 ma : madam (回文!完美!) 输入格式 第一行是一个整数N,表示接下来的字符串的长度(N <= 80

史上最严学生体质健康标准:体测不到50分不能毕业

日前,教育部印发<国家学生体质健康标准(2014年修订)>(以下简称标准),其中要求各学校每学年开展覆盖本校各年级学生的<标准>测试工作,并根据学生学年总分评定等级.如果测试成绩不合格,后果很严重:普通高中.中等职业学校和普通高等学校学生毕业时,测试成绩达不到50分者按结业或肄业处理.加上<标准>中增加了多个必测项目,且难度不小,因此,不少网友惊呼其为“史上最严”,但力挺者众多. 增加多个必测项目 记者在这份新修订的<标准>中看到,<标准>适用于

2018/3/1 省选模拟考试 50分

T1 30分模拟暴力,40分树的直径.拿了0分.(空间开小了爆了,因为缩点之后是又建了一次图,两个边的编号tot没分开,mdzz) 只写了后40分,而这40分中有20分不需要边双连通分量.写了一个类似于强连通分量(标记双向边)的缩点,应该实现哪里出了偏差,因为就算空间开大改正tot的bug也还是20分. T2 写了50分纯暴力 会bsgs可以得80分好像,但是我只会快速幂和暴力,所以50. T3 看了题目,没写,感觉是lca和一些神奇的操作.题解看上去是一个挺裸的lca,亏了. 原文地址:htt