c题:https://ac.nowcoder.com/acm/contest/65157/C

题目等价于ax+by (x>=0,y>=0,但是x,y不同时为0)的集合中第k小的数

1.将a,b放入集合中,贪心的想每次从集合中取出最小的数为t,将t+a,t+b加入集合,直到集合中恰好有k个数

2.为了便于维护,我们每次删掉最小的数直到恰好删掉第k个就直接输出答案

Ac代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include<set>

using namespace std;
typedef long long LL;

int k,a,b;
set<LL>s;

int main()
{
    cin>>k>>a>>b;
    LL minx=-1;  //记录答案
    
    s.insert(a);
    s.insert(b);
    
    while(k--){
        minx=*s.begin();
        
        s.erase(minx);  //每次删除最小的数
        
        s.insert(minx+a);
        s.insert(minx+b);
    }
    
    cout<<minx<<endl;   //直接输出第k小的数
    return 0;
}