牛客月赛c(简单推理,以及对set的灵活运用)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

“O.o?”

集合中一开始拥有两个数字 a和b,如果 a与 b 相同,那么仅有一个数字。

小沙每次可以选择集合中的两个数(可以相同),将他们的和放入集合中,请问所有可能的集合中,第 K 小的值最小为多少?

注:集合中相同元素只能有一个。


分析:

刚刚看这题的时候,就有这样的思路,任何一个集合里面的数都可以用i*a+j*b表示,然后想着用循环遍历,然后用优先队列储存,但是发现有个问题,相同数不能筛掉,所以自然想到了set,然而只想到了去重,后面看大佬的思路,发现每次把元素放集合里是把set集合最小一位加a或者b,用set储存。


#include<bits/stdc++.h>
using ll=long long;
using namespace std;
const ll mod=1e9+7;
void solve()
{
   set<ll> q;
   ll k,a,b;
   cin>>k>>a>>b;
   q.insert(a),q.insert(b);
    ll res;
    while(k--)
    {
         res=*q.begin();
        q.erase(res);
        q.insert(a+res);
        q.insert(b+res);
    }
    cout<<res<<'\n';
}
    int main()
   {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    ll t=1;
    while(t--)
    solve();
    return 0;
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值