您的位置:首页 > 其它

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

2015-03-11 21:53 453 查看
@班大大

由于题面上硬币值是整数,并且有界!所以我们可以将硬币值作为下标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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: