链接:ARC088-D-Wide Flip
题目大意:给出一个长度为
105
的01串,操作是每次选一个长度至少为
K
的区间,将01反转,可进行多次操作,要使得最后为全0,问
解题思路:
对于字符串
s[1…n]
考虑相邻两位不同
si≠si+1
,要使得两位相同,最大可操作连续范围为
max(i,n−i)
,扫一遍,取该值的最小值为
T(s)
,
K
至多为
又可证明,
K
为
当
i<=N−K
时,向右的连续一段翻转,当
i>k
时,向左的连续一段翻转。
对于
N−k+1
和
K
之间的字符,由
这样,结果就是
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
const int MAXN=1e5;
char s[MAXN];
int main()
{
while(scanf("%s",s+1)!=EOF)
{
int len=strlen(s+1);
int ans=len;
for(int i=1;i<len;i++)
{
if(s[i]!=s[i+1])
ans=min(ans,max(i,len-i));
}
printf("%d\n",ans);
}
return 0;
}