WA9个点求调,悬关
查看原帖
WA9个点求调,悬关
378195
icaijy楼主2025/1/9 11:02

思路是贪心用双指针,分第一个大于第二个和第一个小于第二个跑两次。当第一个取 ii 时第二个取到小于等于第一个的,这样随着 ii 增大,第二个再小和也更小且差更大。求调,或证明思路有误

// LUOGU_RID: 197479225
#include <bits/stdc++.h>
#define int long long
#define f(x) freopen(x"in.txt","r",stdin);freopen(x"out.txt","w",stdout)
using namespace std;

int a[200005];
int b[200005];

signed main(){
    int n,m,d;
    cin>>n>>m>>d;
    for (int i=1;i<=n;i++) cin>>a[i];
    for (int i=1;i<=m;i++) cin>>b[i];
    sort(a+1,a+n+1);
    sort(b+1,b+m+1);
    int j=1,ans=-1;
    for (int i=1;i<=n;i++){
        if (a[i]<b[j]) continue;
        while (a[i]>=b[j]&&j<=m) {
            if (a[i]-b[j]<=d) ans=a[i]+b[j];
            j++;
        }
        j--;
    }
    j=1;
    for (int i=1;i<=m;i++){
        if (a[j]>b[i]) continue;
        while (b[i]>=a[j]&&j<=n) {
            if (b[i]-a[j]<=d) ans=a[j]+b[i];
            j++;
        }
        j--;
    }
    cout<<ans;
    return 0;
}
2025/1/9 11:02
加载中...