求助各位大神,P3718题一直是84分,第1、2、8、9个测试点过不了,用二分做的,谁能告诉我错在了那里?感激不尽
{
#include<bits/stdc++.h>
using namespace std;
int m,n;
char a[100001];
int cal(int ans)
{
char j=a[0];
int num=0;
int num1=1;
int num2=1;
for(int i=1;i<m;i++)
{
if(a[i]==j)
num2++;
else
{
int t=num2-num1+1;
while(t>ans)
{
t-=(ans+1);
num++;
//printf("%d ",i+1);
}
num1=i;
num2=i;
j=a[i];
}
}
int t=num2-num1+1;
while(t>ans)
{
t-=(ans+1);
num++;
//printf("%d ",m);
}
//printf("%d : %d\n",ans,num);
return num;
}
int main()
{
scanf("%d%d%s",&m,&n,a);
int ans=0;
for(int i=(1<<16);i;i>>=1)
if(i+ans<=m&&cal(ans+i)>n)
ans+=i;
ans++;
printf("%d",ans);
return 0;
}