找硬币(哈希表)

题目描述

伊娃喜欢从整个宇宙中帮小柏同学收集硬币。

有一天,她去了一家宇宙购物中心购物,结账时可以使用各种硬币付款。

但是,有一个特殊的付款要求:每张帐单,她只能使用恰好两个硬币来准确的支付消费金额。

给定她拥有的所有硬币的面额,请你帮她确定对于给定的金额,她是否可以找到两个硬币来支付。
输入格式

第一行包含两个整数 N和 M,
分别表示硬币数量以及需要支付的金额。

第二行包含 N
个整数,表示每个硬币的面额。

输出格式
输出一行,包含两个整数 V1,V2,
表示所选的两个硬币的面额,使得 V1≤V2 并且 V1+V2=M。

如果答案不唯一,则输出 V1最小的解。

如果无解,则输出No Solution

数据范围

1 ≤ N ≤ 105 1≤N≤105 1N105
1 ≤ M ≤ 1000 1≤M≤1000 1M1000

输入样例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



C++ 代码

#include<bits/stdc++.h>
using namespace std;

const int N = 100010;
int a[N];
int n,m,x;
int main()
{
    
       
    memset(a,-1,sizeof(a));
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
    
    
		cin>>x;
		a[x]=x;
	}
	
	 int flag=0,res=0;
	for(int i=m-1;i>0;i--)
	{
    
    
		if(a[i]!=-1&&a[m-i]!=-1&&i!=m-i)   // i 和 m-i 都存在  并且不是同一个值;
	    {
    
    	  
	            res=i;
	    		flag=1;
	    		break;	
		}
	}
	if(flag) cout<<m-res<<" "<<res;
	else cout<<"No Solution";
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_46339668/article/details/112800105