PAT_A1048
PAT甲级1048.
目录
A1048
题目
样例
样例1
输入:
8 15
1 2 8 7 2 4 11 15
输出:
4 11
样例2
输入:
7 14
1 8 7 2 4 11 15
输出:
No Solution
思路和坑点
使用两点法,把币值从小到大排序,然后头尾各一个指针向中间逼近,如果有答案则输出,否则按照要求输出无解。
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(void){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt","r",stdin);
#endif
int n,m;
scanf("%d%d",&n,&m);
vector<int> v(n);
for(int i=0;i<n;i++)
scanf("%d",&v[i]);
sort(v.begin(),v.end());
int i=0,j=n-1,flag=0; //两点法,i,j为两端的指针,flag为答案的标记
while(i<j){
int sum=v[i]+v[j];
if(sum<m) i++;
else if(sum==m){
printf("%d %d",v[i],v[j]);
flag=1; break;
}
else j--;
}
if(flag==0) puts("No Solution");
return 0;
}