72pts求助
查看原帖
72pts求助
1236806
wjr_jok楼主2024/3/22 16:27
使用大根堆维护最大值,每次分解为两半使用大根堆维护最大值,每次分解为两半

提交记录提交记录

#include<bits/stdc++.h>
using namespace std;
int n,k,cnt,cc,minn;
char xl[100001];
priority_queue<int> s;
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>xl[i];
	}
	for(int i=0;i<=n;i++){
		if(xl[i]!=xl[i+1]){
			s.push(cnt);
			cnt=1;
		}
		else{
			cnt++;
		}
	}
	for(int i=1;i<=k;i++){
		cc=s.top();
		s.pop();
		s.push((cc-1)/2);
		s.push(cc-(cc-1)/2-1);
	}
	while(!s.empty()){
		minn=max(minn,s.top());
		s.pop();
	}
	cout<<minn;
	return 0;
}
如果解法有误请帮我hack一下谢谢如果解法有误请帮我hack一下谢谢
2024/3/22 16:27
加载中...