题意
有一堵长度为n的墙需要刷漆,你有一把长度为k的刷子。墙和刷子都被均匀划分成单位长度的小格,刷子的每一格中都沾有某种颜色(纯色)的漆。你需要用这把刷子在墙上每一个可能的位置(只要刷子不超出墙,且对准格子;共有n-k+1个位置)都刷一遍。如果墙上的某一格被不同颜色的漆刷过,那么它会呈现混合色。
现在墙上某些格子需要刷成给定的颜色。求出能够完成任务的最短的刷子长度k。
n<=1000000
分析
妈呀一开始看错题目了,没看到每一个位置都要刷。我就说我怎么连题解都看不懂。。。
设最近的两个不同色位置的距离为mn,那么答案显然为n-mn+1。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
char s[1000005];
int main()
{
scanf("%s",s+1);n=strlen(s+1);
int ls=0,mn=n;char lsc;
for (int i=1;i<=n;i++)
if (s[i]!='*')
{
if (ls&&lsc!=s[i]) mn=min(mn,i-ls);
ls=i;lsc=s[i];
}
printf("%d",n-mn+1);
return 0;
}