pat-1049
思路:
一开始没多想,直接暴力,后来发现有简单做法,因为所有的整数的范围都是在500内的正整数,所以
用数组将它们标记,然后排序找到最小的被标记的x(而且m-x也要被标记)。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 100100;
int a[maxn],vis[maxn]={0};
int main(void)
{
int n,i,j,m,x=-1,y=-1;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++) scanf("%d",&a[i]),vis[a[i]]++;
sort(a,a+n);
for(i=0;i<n;i++){
vis[a[i]]--;
if(m-a[i]>=0&&vis[m-a[i]]>0){
x=a[i];y=m-a[i];break;
}
}
if(x<0) printf("No Solution\n");
else{
if(x<y) printf("%d %d\n",x,y);
else printf("%d %d\n",y,x);
}
return 0;
}