#3 TLE求助(玄2关)
查看原帖
#3 TLE求助(玄2关)
1287433
__ycy1124__楼主2024/7/26 11:24
#include<bits/stdc++.h>
using namespace std;
int a[200001];
int main(){
	int t;
	scanf("%d",&t);
	while(t){
		t--;
		int n;
		long long k;
		int tot;
		long long js=0;
		scanf("%d%lld",&n,&k);
		for(int i=1;i<=n;i++){
			scanf("%d",&a[i]);
			js+=a[i];
		}
		sort(a+1,a+n+1);
		long long l=0,r=js-k;
		int ans=0;
		int w1=a[1];
		long long w2=js;
		while(l<=r){
			tot=n;
			a[1]=w1;
			js=w2;
			long long mid=l+r>>1;
			for(long long i=1;i<=mid;i++){
				if(n-tot+1>a[tot]-a[1]||tot==1){
					a[1]--;
					js-=(n-tot+1);
				}
				else{
					js-=(a[tot]-a[1]);
					tot--;
				}
			}
			if(js<=k){
				r=mid-1;
				ans=mid;
			}
			else{
				l=mid+1;
				ans=mid+1;
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}
2024/7/26 11:24
加载中...