84pts求调
查看原帖
84pts求调
1111742
mincrafter_or_cy楼主2024/8/5 11:18
#include<bits/stdc++.h>
using namespace std;
int n,k,ans=0x7fffffff,cnt=0,maxa=0;
char s[100005];
int a[100005];
bool check(int);
int main(){
	scanf("%d%d",&n,&k);
	scanf("%s",s);
	a[0]=1;
	for(int i=1;i<n;i++){
		if(s[i]==s[i-1]) a[cnt]++;
		else{maxa=max(maxa,a[cnt]);a[++cnt]++;}
	}
	maxa=max(a[cnt],maxa);
	int l=1,r=maxa+1,mid=(r+l)>>1;
	while(l<r){
		if(check(mid)){
			r=mid;
			ans=min(ans,mid);
		}
		else l=mid+1;
		mid=(l+r)>>1;
	}
	if(check(mid)) ans=min(ans,mid);
	printf("%d",ans);
	return 0;
}
bool check(int x){
	if(maxa<=x) return 1;
	int sum=0;
	for(int i=0;i<=cnt;i++) sum+=(a[i]/(x+1));
	if(sum<=k) return 1;
	return 0;
}

常见问题

long long无误,r=mid-1没用

2024/8/5 11:18
加载中...