题目描述
输入
输出
输出两个用空格隔开的数表示位置(从零开始计数),答案有唯一解。
样例输入1
6 15
1 5 6 7 10 26
样例输出1
1 4
做法1
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, t;
scanf("%d%d", &n, &t);
vector<int> nums(n);
for (int i = 0; i < n; ++i) cin >> nums[i];
sort(nums.begin(), nums.end());
int a = 0, b = n - 1;
while (a < b) {
int m = nums[a] + nums[b];
if (m == t) {
printf("%d %d\n", a, b);
break;
} else if (m > t) {
--b;
} else {
++a;
}
}
return 0;
}
做法2
#include <bits/stdc++.h>
using namespace std;
int main(void) {
int n, t;
scanf("%d%d", &n, &t);
unordered_map<int, int> mp;
for (int i = 0, tmp; i < n; ++i) {
scanf("%d", &tmp);
mp[tmp] = i;
}
for (const auto v: mp) {
if (mp.count(t - v.first)) {
int a = v.second;
int b = mp[t - v.first];
printf("%d %d\n", min(a, b), max(a, b));
break;
}
}
return 0;
}