美文网首页
PAT甲级 1048 Find Coins (25 分)

PAT甲级 1048 Find Coins (25 分)

作者: Rick97 | 来源:发表于2018-10-30 10:32 被阅读0次

原题链接 PAT甲级 1048 Find Coins (25 分)

题目大意 给定n个正整数和m,判断如果n个正整数中是否有a+b=m,如果有则输出。如果有多对a、b,则输出a最小的情况。反之,输出"No Solution"。

分析 建立coin数组(int型),记录正整数a的出现次数 。使用set保存输入的正整数,set默认从小到大排列,以及不重复出现元素,这正是我们这道题所需要的。
另外,如果正整数a刚好是m的一半,即a+b=m,b=a。那么coin[a]必须大于等于2,不然就是重复使用这个硬币了。

#include<iostream>
#include<set>
using namespace std;
int coin[100010]={0};
set<int> s;
int main(){
    int n, m, t;
    scanf("%d%d", &n, &m);
    for(int i=0;i<n;i++){
        scanf("%d", &t);
        coin[t]++;
        s.insert(t);
    }
    for(auto it=s.begin();it!=s.end();it++){
        if(coin[m-*it]>(2*(*it)==m?1:0)){
            printf("%d %d", *it, m-*it);
            return 0;
        }
    }
    printf("No Solution");
    return 0;
}

相关文章

网友评论

      本文标题:PAT甲级 1048 Find Coins (25 分)

      本文链接:https://www.haomeiwen.com/subject/fggwtqtx.html