两段代码到底哪里不同?我觉得明明一样啊
查看原帖
两段代码到底哪里不同?我觉得明明一样啊
474514
19智能刘晓飞楼主2021/7/4 18:29

第一段(一直3 9 10wa)

#include<stdio.h>
#include<iostream>
#include <algorithm>
using namespace std;
long long a[1000010];
int counting(long long a[],long long k,long long n){
	long long h=0;
	for(long long i=0;i<n;i++){
		if(a[i]>k){
			h=h+(a[i]-k);
		}
	}
	return h;
}


int bs(long long a[],long long m,long long n){
	long long l=a[0],r=a[n-1],x;
	while(l<=r){
		long long mid = (l+r)/2;
		
		if(counting(a,mid,n)<m){
			r=mid-1;
		}
		else {
			x=mid;
			l=mid+1;
		}

	}
	return x;
}


int main(){
	long long n,m,ans;
	scanf("%lld%lld",&n,&m); 
	for(long long i=0;i<n;i++){
		scanf("%lld",&a[i]);
	}
	sort(a,a+n);
	ans = bs(a,m,n);
	cout<<ans;
}

第二段(直接ac)

#include<stdio.h>
#include<iostream>
#include <algorithm>
using namespace std;
long long a[1000010];

int main(){
	long long n,m,ans,i;
	scanf("%lld%lld",&n,&m); 
	for(long long i=0;i<n;i++){
		scanf("%lld",&a[i]);
	}
	sort(a,a+n);
	long long r=a[n-1],l=a[0],sum=0,mid;
	while(l<=r){
		sum=0;
		mid = (l+r)/2;
		for(i=0;i<n;i++){
			if(a[i]>mid)
			sum=sum+(a[i]-mid);
		}
		if(sum<m){
			r=mid-1;
		}
		else{
			ans = mid;
			l=mid+1;
		}
	}
	cout<<ans;
}
2021/7/4 18:29
加载中...