Eva 喜欢收集来自宇宙各地的硬币,包括火星等其他星球的硬币。一天她来到一家可以接受各种硬币支付的商场。但这里对付款有特殊要求:每笔账单必须恰好使用两枚硬币来支付精确金额。由于她带了多达 105105 枚硬币,她需要你的帮助。对于任意给定的支付金额,你需要告诉她是否能找到两枚硬币来支付。
输入规格:
每个输入文件包含一个测试用例。每个测试用例的第一行包含两个正整数:NN(≤105≤105,表示硬币总数)和 MM(≤103≤103,表示需支付的金额)。第二行包含 NN 个硬币面值,均为不超过 500 的正整数。行内数字以空格分隔。
输出规格:
对于每个测试用例,输出一行:若存在两枚硬币面值 V1V1 和 V2V2(V1+V2=MV1+V2=M 且 V1≤V2V1≤V2),则输出 V1 V2V1V2。若有多种方案,则输出 V1V1 最小的那一对;若无方案,则输出No Solution。
样例输入 1:
8 15 1 2 8 7 2 4 11 15样例输出 1:
4 11样例输入 2:
7 14 1 8 7 2 4 11 15样例输出 2:
No Solution代码:
#include <iostream> #include <bits/stdc++.h> #include <cstring> #include <iomanip> using namespace std; vector<int> v; bool cmp(int a,int b){ return a<b; } int main(){ int n,m;cin>>n>>m; for(int i=0;i<n;++i){ int k;cin>>k;v.push_back(k); } sort(v.begin(),v.end(),cmp); int flag=0; int l=0,r=n-1; while(l<r){ int s=v[l]+v[r]; if(s<m)l++; else if(s>m)r--; else{ cout<<v[l]<<" "<<v[r]; flag=1; break; } } if(!flag)cout<<"No Solution"<<endl; return 0; }