思路:
500個面值,哈希存儲即可。注意從1開始算的話,注意M-i>500的情況。
代碼:
#include "iostream"
#include "vector"
#include "string"
#include "cstring"
#include "queue"
#include "map"
#include "cstdio"
#include <limits.h>
using namespace std;
int main()
{
int N, M;
cin >> N >> M;
int lim = M / 2;
vector<int> result(501, 0);
for (int i = 0; i < N; i++)
{
int k;
cin >> k;
result[k]++;
}
int i = 1;
for (; i <= M/2; i++)
{
if (M - i >= 500)
continue;
if (M % 2 == 0 && i == M / 2)
{
if (result[i] >= 2)
break;
else
continue;
}
if (result[i] != 0 && result[M - i] != 0)
break;
}
if (i == M/2 + 1)
cout << "No Solution";
else
cout << i << ' ' << M - i;
}