2017中国大学生程序设计竞赛-杭州站-重现赛-Super-palindrome

比赛题目:
http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf

#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
/*
 * 题意是求令所有奇数长度的子串都是回文的最小改动次数。
 * 理解了就知道是求令偶数下标与奇数下标都是同一个字母的最小改动次数。
 * 显然,分别统计奇数和偶数下标最多的字母数量,长度减去两者之和就可以求出要改动的次数。
 * */
string s;

map<char,int> num;
int kc(int x)

{   num.clear();
    for(int i=x;i<s.length();i=i+2)//统计奇数偶数下标的字母数量
    {
        num[s[i]]++;
    }
    map<char,int>::iterator it;
    int ans=0;
    for(it=num.begin();it!=num.end();it++){
        //cout<<it->second<<endl;
        ans=max(it->second,ans);//求出最大的字母数量
    }
    return ans;
}

int main()
{
    std::ios::sync_with_stdio(false);

    int t;
    cin>>t;
    while (t--) {
        cin>>s;
        int res=(s.length()+1)/2-kc(0)+s.length()/2-kc(1);//可以改成s.length()-kc(0)-kc(1)
        cout<<res<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值