标签:字母 eof define force href style char mem soft
传送门: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",n-ans); 41 } 42 return 0; 43 }
codeforces-1332C- K-Complete Word
标签:字母 eof define force href style char mem soft
原文地址:https://www.cnblogs.com/YangKun-/p/12629624.html