题目:https://www.acwing.com/problem/content/description/802/
给定两个升序排序的有序数组 A 和 B,以及一个目标值 x。
数组下标从 0 开始。
请你求出满足 A[i]+B[j]=x 的数对 (i,j)。
数据保证有唯一解。
#include<bits/stdc++.h>
#define int long long
typedef long long ll;
using namespace std;
const int N = 2e5 + 10;
const int mod = 998244353;
int mp[N];
void solve(){
int n,m,x;
cin>>n>>m>>x;
vector<int> a(n+1,0),b(n+1,0);
for (int i = 1; i <= n; ++i) {
cin>>a[i];
}
for (int i = 1; i <= m; ++i) {
cin>>b[i];
}
//类似一个暴力,但和双重循环不一样的是,j是从m开始向下枚举
//如果a[i] + b[j] = k ,则j+1——m都不可能成立,故
//可以看成一个j不会回退的暴力
for (int i = 1,j = m; i <= n; ++i) {
while (j >= 1 && a[i] + b[j] > x) j--;
if(a[i] + b[j] == x){
cout<<i<<" "<<j<<endl;
return;
}
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t = 1;
//cin>>t;
while(t--){
solve();
}
return 0 ;
}