PAT甲级-散列类型-1048 Find Coins解题思路

1048 Find Coins (25 分)

在这里插入图片描述

思路

这里有个坑,哈希表尽量做两倍以上,因为限制在500以内,但目标在1000以内,它们做差,可能出现1000-1=999的情况,做大一点。

同一张大小出现多次的情况需要分开讨论,不要为了代码简洁就全堆一个if里。

这里的哈希表用的不是bool,因为要记录出现的次数,而不仅仅是有无出现,所以用int类型。

代码

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

int main()
{
    
    
    int n,m;
    int num;
    int hash[1005]={
    
    0};
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
    
    
        cin>>num;
        hash[num] +=1;
    }
    for(int i =0 ; i<=m/2;i++)
    {
    
            
        if(i==m-i)
        {
    
    
            if(hash[i]>=2)
            {
    
    
                cout<<i<<" "<<m-i<<endl;
                return 0;
            }
            else {
    
    continue;}
        }
        
        if(hash[i]>0 && hash[m-i]>0)
        {
    
    
            cout<<i<<" "<<m-i<<endl;
            return 0;
        }
    }
    cout<<"No Solution"<<endl;
}

猜你喜欢

转载自blog.csdn.net/weixin_43999137/article/details/114298107