1048. Find Coins 解析

来源:互联网 发布:slam包括的算法 编辑:程序博客网 时间:2024/06/06 04:39

找两个硬币看能不能付钱,两个硬币必须正好等于要付的价格。

那就直接从小到大排序,然后从第一个元素开始,找价格减去当前硬币的价值,看能不能找到。

注意二分查找的最后位置。这个后面再找个时间研究下。里面其实有很多细节需要注意的。

#include <iostream>#include <vector>#include <string>#include <algorithm>#include <map>#include <queue>#include <stack>#include <cstring>#define MAX 100010using namespace std;int n,m;int coin[MAX];int BinSearch(int num){int l = 0 ,r = n - 1;int pos = -1;while(l < r){int mid = (l + r + 1) /2 ;if(coin[mid] < num)l = mid + 1;else if(coin[mid] > num)r = mid - 1 ;else{pos = mid;break;}}return pos;}int main(){scanf("%d%d",&n,&m);for(int i = 0 ; i < n ; i++){scanf("%d",&coin[i]);}sort(&coin[0],&coin[n]);bool tag = false;for(int i = 0; i < n ;i++){int pos = BinSearch(m-coin[i]);if(pos>0 && pos != i){printf("%d %d\n",coin[i],coin[pos]);tag = true;break;}}if(!tag)printf("No Solution\n");return 0;}


原创粉丝点击