题目描述
输入
输出
输出两个用空格隔开的数表示位置(从零开始计数),答案有唯一解。
样例输入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; }