社区讨论

80pts,求调

P9937[USACO21OPEN] Acowdemia I B参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mmadl0kg
此快照首次捕获于
2026/03/03 16:58
上周
此快照最后确认于
2026/03/06 18:55
4 天前
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
int n,l;
int c[N];
int ans=1;
bool check(int x){
	int sum1=0;
	int sum2=0;
	for(int i=1;i<=n;i++){
		if(c[i]==x-1){
			sum2++;
		}
		else if(c[i]>=x){
			sum1++;
		}
	}
	if(min(l,sum2)<x-sum1){
		return 0;
	}
	return 1;
} 
int main(){
	cin>>n>>l;
	for(int i=1;i<=n;i++){
		cin>>c[i];
	}
//	cout<<check(3);
	int l=0,r=n;
	while(l<r){
		int mid=l+(r-l)/2;
//		cout<<l<<" "<<r<<" "<<mid<<"\n";
		if(mid==l){
			break;
		}
		if(check(mid)){
			l=mid;
			ans=max(ans,mid);
		}
		else{
			r=mid-1;
		}
	}
	cout<<ans;
	return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...