92分求助
查看原帖
92分求助
400205
basachenboming楼主2021/8/29 16:27

二分做的

#include<bits/stdc++.h>
using namespace std;
char ch[100001];
int r[100001];
int num,tot=0;
int n,k;
bool pan(int x)
{
num=0;
tot=1;
for(int i=1;i<=n;i++)
{
	if(ch[i]=='F')
	{
		r[i]=1;
	}
	if(ch[i]=='N')
	{
		r[i]=2;
	}
}	
for(int i=2;i<=n;i++)
{
	if(r[i]==r[i-1])
	{
	tot++;	
	}
	if(tot>x)
	{
		num++;
        if(r[i]==1)
        {
        r[i]=2;
        }
        else r[i]=1;
	}
	if(r[i]!=r[i-1])
	{
		tot=1;
	}

}
if(num>k)
{
	return 0;
}
else return 1;
}
int main()
{
cin>>n>>k;
if(n==1)
{
cout<<1;
return 0;
}
if(n==k)
{cout<<1;
return 0;
}
for(int i=1;i<=n;i++)
{
	cin>>ch[i];
}
int y=1;
for(int i=2;i<=n;i++)
{
	if(ch[i]==ch[i-1])
	{
		y++;
	}
}
if(y==n)
{
	cout<<n/(k+1);
	return 0;
}
int ans=0;
int left=1;
int mid;
int right=n;
while(left<=right)
{
	mid=(left+right)/2;
	if(pan(mid)==1)
	{
		right=mid-1;
	}
	else left=mid+1;
}
cout<<left;
    return 0;
}
2021/8/29 16:27
加载中...