两个代码哪里有差别?
查看原帖
两个代码哪里有差别?
913288
3_14楼主2024/11/29 15:52

我的代码输出不对QAQ

我的:

#include<bits/stdc++.h>
#define lcm(x,y) x/__gcd(x,y)*y;
#define str to_string
using namespace std;
using ll=long long;
const int MAX=1e5+1;
const double EPS=1e-6;
ll n,m,k,a[MAX],b[MAX];
bool check(ll mid,ll sum=0){
	for(ll i=0;i<n;i++)sum+=upper_bound(b,b+m,mid-a[i])-b;
	return sum>=k;
}
void work(){
	ll l=0,r=INT_MAX;
	while(l<=r){
		ll mid=(l+r)>>1;
		if(check(mid))l=mid+1;
		else r=mid-1;
	}
	cout<<r<<'\n';
}
int main(){
	cin>>n>>m>>k;
	for(ll i=0;i<n;i++)cin>>a[i];
	for(ll i=0;i<m;i++)cin>>b[i];
	sort(b,b+m);
	work();
	return 0;
}

题解:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n, m, k, a [100005], b [100005];
bool check ( int x ) { 
    int sum = 0;
    for(int i = 0 ; i < n ; i++ ) {
        sum += upper_bound ( b, b + m, x - a[i] ) - b;
    }
    return sum >= k;
}
signed main(){
    cin >> n >> m >> k;
    for(int i = 0 ; i < n ; i++ ) {
        cin >> a [i];
    }
  
    for(int i = 0 ; i < m ; i++ ) {
        cin >> b[i];
    }
    sort( b, b + m );
    int l = 0, r = INT_MAX;
    while(l + 1 < r ) {
        int mid = ( l + r ) / 2;
        if (check ( mid ) ) r = mid;
        else l = mid;
    }
    cout << r;
    return 0;
}
2024/11/29 15:52
加载中...