#include<cstdio>
#include<stdlib.h>
#include<cstring>
using namespace std;
int num[1005]={0};
int face_value;
bool flag=false;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&face_value);
num[face_value]++;
}
for(int i=0;i<1005;i++)
{
if(num[i]&&num[m-i])
{
if(i==m-i&&num[i]<=1)
{
continue;
}
printf("%d %d\n",i,m-i);
return 0;
}
}
printf("No Solution\n");
system("pause");
return 0;
}
//二分法
#include<cstdio>
#include<algorithm>
#include<stdlib.h>
#include<cstring>
using namespace std;
int bin(int a[],int left,int right,int x)
{
while(left<=right)
{
int mid=(left+right)/2;
if(a[mid]>x)
{
right=mid-1;
}
else if(a[mid]<x)
{
left=mid+1;
}
else
{
return 1;
}
}
return -1;
}
int a[100010];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
for(int i=0;i<n;i++)
{
int j=bin(a,i+1,n-1,m-a[i]);
if(j!=-1)
{
printf("%d %d",a[i],m-a[i]);
system("pause");
return 0;
}
}
printf("No Solution");
system("pause");
return 0;
}
//two pointers
#include<cstdio>
#include<algorithm>
#include<stdlib.h>
#include<cstring>
using namespace std;
int a[100010];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int i=0;
int j=n-1;
while(i<j)
{
if(a[i]+a[j]==m)
{
printf("%d %d",a[i],m-a[i]);
system("pause");
return 0;
}
else if(a[i]+a[j]>m)
{
j--;
}
else i++;
}
printf("No Solution");
system("pause");
return 0;
}