Hash映射,以空间换时间。
注意硬币为1-500面额,在查找过程中下标不能越界或为负,否则会出现段错误。
#include<stdio.h>
#include<memory.h>
#include<Windows.h>
int cnt[501];
int main()
{
memset(cnt, 0, sizeof(int) * 501);
int N, M;
scanf("%d%d", &N, &M);
for (int i = 0; i < N; i++)
{
int value;
scanf("%d", &value);
cnt[value]++;
}
for (int i = 1; i <= 500; i++)
{
if (i == M - i)
{
if (cnt[i] >= 2)
{
printf("%d %d\n", i, M - i);
return 0;
}
}
else if (M - i >= 1 && M - i <= 500)
{
if (cnt[i] >= 1 && cnt[M - i] >= 1)
{
printf("%d %d\n", i, M - i);
return 0;
}
}
}
printf("No Solution\n");
return 0;
}