zoukankan      html  css  js  c++  java
  • Codeforces #656 Problem D

    题面

    You are given a string s[1…n] consisting of lowercase Latin letters. It is guaranteed that n=2k for some integer k≥0.

    The string s[1…n] is called c-good if at least one of the following three conditions is satisfied:

    The length of s is 1, and it consists of the character c (i.e. s1=c);
    The length of s is greater than 1, the first half of the string consists of only the character c (i.e. s1=s2=⋯=sn2=c) and the second half of the string (i.e. the string sn2+1sn2+2…sn) is a (c+1)-good string;
    The length of s is greater than 1, the second half of the string consists of only the character c (i.e. sn2+1=sn2+2=⋯=sn=c) and the first half of the string (i.e. the string s1s2…sn2) is a (c+1)-good string.
    For example: "aabc" is 'a'-good, "ffgheeee" is 'e'-good.

    In one move, you can choose one index i from 1 to n and replace si with any lowercase Latin letter (any character from 'a' to 'z').

    Your task is to find the minimum number of moves required to obtain an 'a'-good string from s (i.e. c-good string for c= 'a'). It is guaranteed that the answer always exists.

    You have to answer t independent test cases.

    Another example of an 'a'-good string is as follows. Consider the string s="cdbbaaaa". It is an 'a'-good string, because:

    the second half of the string ("aaaa") consists of only the character 'a';
    the first half of the string ("cdbb") is 'b'-good string, because:
    the second half of the string ("bb") consists of only the character 'b';
    the first half of the string ("cd") is 'c'-good string, because:
    the first half of the string ("c") consists of only the character 'c';
    the second half of the string ("d") is 'd'-good string.
    Input
    The first line of the input contains one integer t (1≤t≤2⋅104) — the number of test cases. Then t test cases follow.

    The first line of the test case contains one integer n (1≤n≤131 072) — the length of s. It is guaranteed that n=2k for some integer k≥0. The second line of the test case contains the string s consisting of n lowercase Latin letters.

    It is guaranteed that the sum of n does not exceed 2⋅105 (∑n≤2⋅105).

    Output
    For each test case, print the answer — the minimum number of moves required to obtain an 'a'-good string from s (i.e. c-good string with c= 'a'). It is guaranteed that the answer exists.

    Example
    inputCopy
    6
    8
    bbdcaaaa
    8
    asdfghjk
    8
    ceaaaabb
    8
    bbaaddcc
    1
    z
    2
    ac
    outputCopy
    0
    7
    4
    5
    1
    1

    思路

    不得不说,cf这题目是真的臭长。自己模拟一下就知道是个递归了,直接搜就可以了。

    代码实现

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<set>
    #include<queue>
    #include<map>
    using namespace std;
    typedef long long ll;
    const int maxn=131100;
    char s[maxn];
    int cacl (int l,int r,char ans) {
        int res=0;
        for (int i=l;i<=r;i++)   {
            if (s[i]!=ans) res++;
        }
        return res;
    }
    inline int dfs (int l,int r,char ans) {
        if (l==r) return cacl (l,r,ans);
        int t=1e9;
        int mid=(l+r)>>1;
        t=min (t,dfs (l,mid,ans+1)+cacl (mid+1,r,ans));
        t=min (t,dfs (mid+1,r,ans+1)+cacl (l,mid,ans));
        return t;
    }
    int main () {
        int t;
        cin>>t;
        while (t--) {
            int n;
            cin>>n;
            cin>>s;
            char temp='a';
            cout<<dfs (0,n-1,temp)<<endl;
        } 
        return 0;
    }
    
  • 相关阅读:
    zz[读书笔记]《Interpretable Machine Learning》
    Xgboost,LightGBM 和 CatBoost
    zz:Xgboost 导读和实战
    bzoj3252: 攻略 优先队列 并查集 贪心
    [BeiJing2009 WinterCamp]取石子游戏 Nim SG 函数
    Playing With Stones UVALive
    Division Game UVA
    [BJWC2011]禁忌 AC 自动机 概率与期望
    [Jsoi2010]连通数 bitset + Floyd
    洛谷P2197 nim游戏模板
  • 原文地址:https://www.cnblogs.com/hhlya/p/13336209.html
Copyright © 2011-2022 走看看