codeforces-1332C- K-Complete Word

Posted yangkun-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforces-1332C- K-Complete Word相关的知识,希望对你有一定的参考价值。

codeforces-1332C- K-Complete Word

传送门:https://codeforces.com/contest/1332/problem/C

题意:有一个字符串,你可以把某个字母换成任意一个字母,使得得到的新字符串是x个相同的长度为k的回文串

一开始没理解要把新字符串变成啥样,这样的话,回文串的话,把这个拆分后的子串对折,然后对齐,找一下每个位置出现的相同的字符的最多的个数,就是这个位置不需要动的个数,总数减一下就好

   21    7

wudixiaoxingxingheclp

拆分

   wudi xia

   oxin gxi

   nghe clp

   对折 对齐

  wudi
  aix
  oxin
  ixg
  nghe
  plc
  1211

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 char s[200009];
 5 int mp[30];
 6 int main()
 7 {
 8     int t;
 9     scanf("%d",&t);
10     while(t--)
11     {
12         int n,k;
13         scanf("%d%d",&n,&k);
14         scanf("%s",s+1);
15         int ans=0,maxx;
16         for(int j=1; j<=k/2; j++)
17         {
18             memset(mp,0,sizeof(mp));
19             maxx=-1;
20             for(int i=0; i<n/k; i++)
21             {
22                 mp[s[j+k*i]-a]++;
23                 mp[s[k-j+1+k*i]-a]++;
24                 if(mp[s[j+k*i]-a]>maxx) maxx=mp[s[j+k*i]-a];
25                 if(mp[s[k-j+1+k*i]-a]>maxx) maxx=mp[s[k-j+1+k*i]-a];
26             }
27             ans+=maxx;
28         }
29         if(k%2)
30         {
31             memset(mp,0,sizeof(mp));
32             int j=k/2+1,maxx=0;
33             for(int i=0; i<n/k; i++)
34             {
35                 mp[s[j+k*i]-a]++;
36                 if(mp[s[j+k*i]-a]>maxx) maxx=mp[s[j+k*i]-a];
37             }
38             ans+=maxx;
39         }
40         printf("%d
",n-ans);
41     }
42     return 0;
43 }

 

以上是关于codeforces-1332C- K-Complete Word的主要内容,如果未能解决你的问题,请参考以下文章

codeforces#1332F. Independent Set(树上dp)

SQL CTE性能是否取决于声明顺序?

C/C++ ceil 函数

C/C++ floor 函数

C语言数组问题?

关于c++/c