PAT-A 真题 – 1048 Find Coins

发布于 / PAT-甲级 / 0 条评论

Eva loves to collect coins from all over the universe, including some other planets like Mars. One day she visited a universal shopping mall which could accept all kinds of coins as payments. However, there was a special requirement of the payment: for each bill, she could only use exactly two coins to pay the exact amount. Since she has as many as 105 coins with her, she definitely needs your help. You are supposed to tell her, for any given amount of money, whether or not she can find two coins to pay for it.

Input Specification:

Each input file contains one test case. For each case, the first line contains 2 positive numbers: N (105, the total number of coins) and M (103, the amount of money Eva has to pay). The second line contains N face values of the coins, which are all positive numbers no more than 500. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print in one line the two face values V1 and V2 (separated by a space) such that V1+V2=M and V1V2. If such a solution is not unique, output the one with the smallest V1. If there is no solution, output No Solution instead.

Sample Input 1:

8 15
1 2 8 7 2 4 11 15

Sample Output 1:

4 11

Sample Input 2:

7 14
1 8 7 2 4 11 15

Sample Output 2:

No Solution

题目大意:给定一堆硬币,找到与所需要的价格相同的两枚硬币a和b,要求a≤b,如果有多种情况,输出最小的a。

注意:直接暴力查找会超时,最好的办法是记录每种价值的硬币有多少个,然后判断。

这道题再开数组时必须开1000个以上,否则在判断的时候会越界造成测试点3不通过。

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
  int coin_cnt[1010] = {0};
  int cnt, sum;
  cin >> cnt >> sum;
  for(int i = 0; i < cnt; i++){
    int n;
    cin >> n;
    coin_cnt[n]++;
  }
  for(int i = 1; i <= sum; i++){
    if(i == sum - i){  // i == sum - i
      if(coin_cnt[i] >= 2){
        cout << i << ' ' << sum - i;
        return 0;
      }
      break;
    }
    if(coin_cnt[i] && coin_cnt[sum - i]){
      cout << i << ' ' << sum - i;
      return 0;
    }
  }
  cout << "No Solution" << endl;
  return 0;
}

转载原创文章请注明,转载自: 斐斐のBlog » PAT-A 真题 – 1048 Find Coins
目前还没有评论,快来抢沙发吧~