IDEA
1.注意题目给的数字范围的大小,m<=1000,可见将银币大小作为索引的数组为1001即可,该数组存储题目中给出的硬币数,没给的为0
2.从1-m/2遍历即可,不用遍历到m
CODE
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
#define MAX 1001
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif
int n,m;
while(cin>>n>>m){
vector<int> vec(MAX,0);
for(int i=0;i<n;i++){
int val;
cin>>val;
vec[val]++;
}
int flag=0;
int v;
for(v=1;v<=m/2;v++){
vec[v]--;
vec[m-v]--;
if(vec[v]>=0&&vec[m-v]>=0){
flag=1;
break;
}
}
if(flag){
cout<<v<<" "<<m-v<<endl;
}else{
cout<<"No Solution"<<endl;
}
}
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0;
}