第一次尝试:两个测试用例运行超时
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int N,M,v1=1000,v2=1000;
int main()
{
scanf("%d %d",&N,&M);
int a[N];
for(int i=0;i<N;i++) scanf("%d",&a[i]);
sort(a,a+N);
if(M<=2*a[0] || M>=2*a[N-1])
{
printf("No Solution");
return 0;
}
for(int i=0;i<=N-2;i++)
{
for(int j=i+1;j<=N-1;j++)
{
if(a[i]+a[j] == M)
{
if(i<v1) v1=i,v2=j;
}
}
}
if(v1<1000) printf("%d %d",a[v1],a[v2]);
else printf("No Solution");
return 0;
}
第二次哈希散列函数
链接:https://blog.csdn.net/hy971216/article/details/81252039
#include<iostream>
#include<cstdio>
using namespace std;
int hash[1005];
int main() {
int N, M, tmp;
scanf("%d %d", &N, &M);
for(int i = 0; i < N; i++) {
scanf("%d", &tmp);
hash[tmp]++;
}
for(int i = 1; i < M; i++) {
if(hash[i] && hash[M - i]) {
if(i == M - i && hash[i] <= 1) {
continue;
}
printf("%d %d\n", i, M - i);
return 0;
}
}
printf("No Solution\n");
return 0;
}