题目
题目大意
给定一个长度为n的字符串,该串由‘a’,‘b’,'c’三种字符组成。
给定一个区间l,r问最下修改多少次使得区间内不存在长度为2及以上的回文串。
解题思路
通过使用三种字符构造满足条件的字符串,我们能发现只有六种情况的字符串满足条件,
‘abcabcacb’,‘acbacbacb’…。所以突破的关键在于3种字符。
后记
暑假来之不易,且学且珍惜。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n,q;
cin>>n>>q;
string s;
cin>>s;
string s1[7];
s1[1]="abc";
s1[2]="acb";
s1[3]="bac";
s1[4]="bca";
s1[5]="cab";
s1[6]="cba";//cout<<"fidn:"<<endl;
vector<vector<int> >dp(7,vector<int>(n+1,0));
for(int i=1;i<=6;i++)
{
int sum=0;
for(int j=1;j<=n;j++)
{
if(s[j-1]!=s1[i][j%3])sum++;
dp[i][j]=sum;
}
}
while(q--)
{
int l,r;
cin>>l>>r;
int res=1e9;
for(int i=1;i<=6;i++)
{
res=min(res,dp[i][r]-dp[i][l-1]);
}
cout<<res<<endl;
}
return 0;
}