题意
给定k和一个集合初始只包含a,b,每次可以选择一个数乘2或者选择两个数相加然后将结果放入集合中,问所有可能的集合中第k小值最小值。
思路
从小到大贪心,每次将该值加a和加b,当集合的大小枚举到2k时说明指针已经枚举到第k个。
代码
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define debug(x) cerr << #x << ' ' << x << '\n'
using namespace std;
typedef pair<int, int> PII;
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
int k, a, b;
cin >> k >> a >> b;
set<int> s{a, b};
for (auto it = s.begin(); s.size() < 2 * k; it = next(it)) {
s.insert(*it + a);
s.insert(*it + b);
}
auto it = s.begin();
for (int i = 1; i < k; i++) it = next(it);
cout << *it;
return 0;
}
标签:begin,int,auto,long,牛客,小白月赛,集合,78,define
From: https://www.cnblogs.com/acm-wzihan/p/17706072.html