PAT 1048. Find Coins (25) 超简便做法!!!

来源:互联网 发布:自动化设备控制软件 编辑:程序博客网 时间:2024/05/01 20:50

@班大大

由于题面上硬币值是整数,并且有界!所以我们可以将硬币值作为下标hash。,数组value[i]表示的是面值为i的硬币的个数!!输入完成后也就省去了排序过程。两头逼近查找即可

。!机智!!

#include <iostream>#include <string.h>#include <stdio.h>using namespace std;int value[501];int main(){    memset(value,0,sizeof(value));    int N,M;    cin>>N>>M;    int num;    int i=0;    while(i<N)    {        scanf("%d",&num);        value[num]++;//硬币值作为下标hash到数组,value【i】表示面值为i的硬币有几枚        i++;    }    int j=1,k=500;    while(j<k)    {        while(!value[j])j++;        while(!value[k])k--;//找到两头的非零硬币值        if(j+k>M)k--;        else if(j+k<M)j++;        else        {            cout<<j<<" "<<k<<endl;            return 0;        }    }    if(j==k&&j+k==M&&value[j]>1)//相同数值的两枚硬币组成m    {        cout<<j<<" "<<k<<endl;        return 0;    }    cout<<"No Solution"<<endl;    return 0;}


0 0