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;
}