• Codeforces 1332C. K-Complete Word


    K-Complete Word

    题目链接:https://codeforces.com/contest/1332/problem/C

    题目大意:给你一个字符串,问你最少需要换多少个字母才能使其成为K-Complete Word

    解题思路:由于k是n的一个因子,因此n可以为划分为n/k个相同长度的字符串。题目要求

    s[1]=s[1+k]=...=s[1+temp*k],而在最后一个划分为长度为k的字串中,s[1+temp*k]==s[n];

    因此可以推的这个长度为k的字符串也必须是一个回文串。后面贪心一下即可,每次算一下s[1]和s[k]

    统计这几个位置相同字符最大是多少,然后求的即可

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=2e5+10;
    int n,k,cnt[30],num,mx;
    char s[maxn];
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            cin>>n>>k;
            scanf("%s",s);
            int sum=0,ans=0;
            int l,r;
            for(int i=0;i<(k+1)/2;i++)
            {
                for(int j=0;j<26;j++) cnt[j]=0;
                l=i,r=k-i-1;
                for(int j=0;j<n/k;j++)
                {
                    int p,q;
                    p=l+j*k,q=r+j*k;
                    if(p==q) cnt[s[p]-'a']++;
                    else cnt[s[p]-'a']++,cnt[s[q]-'a']++;
                }
                mx=0;
                for(int j=0;j<26;j++) mx=max(mx,cnt[j]);
            //    cout<<mx<<endl;
                sum+=mx;
            }
            ans=n-sum;
            cout<<ans<<endl;
        }
    }
  • 相关阅读:
    POJ 2976 Dropping tests
    【学习笔记-中国剩余定理】POJ1006 Biorhythms
    2017.10.6北京清北综合强化班DAY6
    P1607 [USACO09FEB]庙会班车Fair Shuttle
    2017.10.5北京清北综合强化班DAY5
    洛谷 P1379 八数码难题
    A. 拼音魔法
    A
    K
    A
  • 原文地址:https://www.cnblogs.com/tombraider-shadow/p/12655893.html
Copyright © 2020-2023  润新知