有坑点,因为这个m可能超出给定的1000范围(硬币大小均小于500),所以hash的数组要开大一点,否则将会在第三个测试点中不通过,不知道为什么是答案错误不是段错误,其他的就没有坑点啦
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=110000;
int main()
{
int n,m;
cin>>n>>m;
int a[maxn],hashnum[3001]={0};
for (int i=0;i<n;i++)
{
scanf("%d",&a[i]);
hashnum[a[i]]++;
}
int flag=false;
for (int i=m-1;i>=m/2;i--)
{
if (hashnum[i]!=0)
{
hashnum[i]--;
if(hashnum[m-i]!=0)
{
printf("%d %d",m-i,i);
flag=true;
break;
}
}
}
if (flag==false)
printf("No Solution");
}