#include<stdio.h>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 10005
//char a[maxn],b[maxn];
int a[100010];
int HashTable[100000]={0};
int main()
{
int n,m;
//memset(HashTable,true,sizeof(HashTable));
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
HashTable[a[i]]++;
}
sort(a,a+n);
int flag=0;
for(int i=0;i<n;i++)
{
HashTable[a[i]]--;
int p=m-a[i];
//printf("p=%d\n",p);
if(HashTable[p]>=1)
{
printf("%d %d\n",a[i],p);
HashTable[a[i]]--;
flag=1;
break;
}
}
if(flag==0)
printf("No Solution\n");
return 0;
}
后面用twopointers又做了
只有22分
两个测试点没过
求大神指导
#include<bits/stdc++.h>
using namespace std;
#define maxn 100010
int a[maxn];
void twopointers(int n,int m)
{
int i=0;
int j=n-1;
while(i<j)
{
if(a[i]+a[j]==m)
break;
else if(a[i]+a[j]<m)
i++;
else
j--;
}
if(i<j)
printf("%d %d\n",a[i],a[j]);
else
printf("No solution\n");
}
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);
twopointers(n,m);
return 0;
}