92求助, WA #3 #21
查看原帖
92求助, WA #3 #21
438461
liu_chen_hao楼主2021/10/16 12:36

RT, 不知道有什么问题

#include <bits/stdc++.h>
using namespace std;

string s,ss;
int n,k,m,ans;
int a[100005];

bool check(int x)
{
	int rnt=0;
	if(x==1)
	{
		ss="0";
		for(int i=1; i<=n; i++)
		{
			if(i&1) ss+='N';
			else ss+='F';
		}
		for(int i=1; i<=n; i++)
			if(ss[i]!=s[i]) ++rnt;
		if(rnt>k) return 1;
		ss="0",rnt=0;
		for(int i=1; i<=n; i++)
		{
			if(i&1) ss+='F';
			else ss+='N';
		}
		for(int i=1; i<=n; i++)
			if(ss[i]!=s[i]) ++rnt;
		return (rnt>k)?1:0;
	}
	for(int i=1; i<=m; i++)
		if(a[i]>x) rnt+=a[i]/(x+1);
	return (rnt>k)?1:0;
}
int main()
{
	scanf("%d%d", &n, &k);
	cin>>s;
	for(int i=n; i>=1; i--) s[i]=s[i-1];
	s[0]='0';
	a[++m]=1;
	for(int i=2; i<=n; i++)
	{
		if(s[i]==s[i-1]) ++a[m];
		else ++a[++m];
	}
	for(int i=(1<<30); i; i>>=1)
		if(check(ans+i)) ans+=i;
	++ans;
	printf("%d", ans);
	return 0;
}
2021/10/16 12:36
加载中...