PAT A1048 Find Coins
思路:由于本题中 M <= 1000,因此 哈希表的大小只需要大于 1000,而非题中给出的 N 的最大值 100000,之后便为经典题两数之和的散列解法。注意到若存在多对答案应该按字典序的优先级进行输出,因此选择从 0 开始遍历而非输入的第一个数字开始进行遍历。
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 1005;
int n, m, hashTable[MAXN];
int main() {
cin >> n >> m;
int num;
for(int i = 0; i < n; i++) {
cin >> num;
hashTable[num]++;
}
for(int i = 0; i < MAXN; i++) {
if(hashTable[i] && hashTable[m - i]) {
if(i == m - i && hashTable[i] <= 1)
continue;
cout << i << " " << m - i;
return 0;
}
}
cout << "No Solution";
return 0;
}