P3718
查看原帖
P3718
400201
WuyanruVR楼主2021/1/19 21:03

求助各位大神,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;
}
2021/1/19 21:03
加载中...