#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int a[1009]={0};
//vector<int> vv(10009);//为什么不能放到里面
int main(){
int n,m;
cin>>n>>m;
vector<int> vv(n);//位置又放错,带大小的声明一度要放在输入之后 (注意)
for(int i=0;i<n;i++){
scanf("%d",&vv[i]);
a[vv[i]]++;
}
sort(vv.begin(),vv.end());
int flag=0;
for(int i=0;i<vv.size();i++){
if(a[m-vv[i]]>0&&(m-vv[i]) !=vv[i]&&vv[i]!=0){
printf("%d %d",vv[i],m-vv[i]);
flag=1;
break;
}
else if(a[m-vv[i]]>1&& (m-vv[i]) ==vv[i]&&vv[i]!=0){
printf("%d %d",vv[i],m-vv[i]);
flag=1;
break;
}
}
if(flag!=1){
printf("No Solution");
}
return 0;
}
总结
1.题目不难,但是我一开始把声明放在了cin大小之前,一定不要再犯这种低级错误
2.因为面值不会超过1000,而且从里面找与sort后配对的面额有没有,直接hash同时输入的过程中记录个数,因为考虑这种特殊情况,两个面值相等的,是答案,如果只标记有无,则也会将此视为正确,但你只有一张,所以,必须记录张数特判
3.sort 一下,因为他要找v1最小的,这样sort后一开始找到的记为最小的
英语
无
问题
建立hash 把相乘变为相加需要先抽象 建立一个通用的字典记录辅助集合的记录 有时记录 有无 来给主集合做决定 有时记录个数另有他用