#include <algorithm>
#include <iostream>
#include <vector>
int random_number(int N) // random value in [0, N)
{
static std::random_device seed;
static std::mt19937 eng(seed());
std::uniform_int_distribution<> dist(0, N - 1);
return dist(eng);
}
std::vector<int> random_sample(int first, int last, int n)
{
std::vector<int> numbers;
int remaining = last - first + 1;
int m = std::min(n, remaining);
while (m > 0) {
if (random_number(remaining) < m) {
numbers.push_back(first);
--m;
}
--remaining;
++first;
}
return numbers;
}
int main()
{
auto numbers = random_sample(1, 100, 20);
for (int value : numbers) {
std::cout << value << " ";
}
std::cout << '\n';
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKaW50IHJhbmRvbV9udW1iZXIoaW50IE4pIC8vIHJhbmRvbSB2YWx1ZSBpbiBbMCwgTikKewoJc3RhdGljIHN0ZDo6cmFuZG9tX2RldmljZSBzZWVkOwoJc3RhdGljIHN0ZDo6bXQxOTkzNyBlbmcoc2VlZCgpKTsKCXN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPD4gZGlzdCgwLCBOIC0gMSk7CglyZXR1cm4gZGlzdChlbmcpOwp9CgpzdGQ6OnZlY3RvcjxpbnQ+IHJhbmRvbV9zYW1wbGUoaW50IGZpcnN0LCBpbnQgbGFzdCwgaW50IG4pCnsKCXN0ZDo6dmVjdG9yPGludD4gbnVtYmVyczsKCWludCByZW1haW5pbmcgPSBsYXN0IC0gZmlyc3QgKyAxOwoJaW50IG0gPSBzdGQ6Om1pbihuLCByZW1haW5pbmcpOwoJd2hpbGUgKG0gPiAwKSB7CgkJaWYgKHJhbmRvbV9udW1iZXIocmVtYWluaW5nKSA8IG0pIHsKCQkJbnVtYmVycy5wdXNoX2JhY2soZmlyc3QpOwoJCQktLW07CgkJfQoJCS0tcmVtYWluaW5nOwoJCSsrZmlyc3Q7Cgl9CglyZXR1cm4gbnVtYmVyczsKfQoKaW50IG1haW4oKQp7CglhdXRvIG51bWJlcnMgPSByYW5kb21fc2FtcGxlKDEsIDEwMCwgMjApOwoJZm9yIChpbnQgdmFsdWUgOiBudW1iZXJzKSB7CgkJc3RkOjpjb3V0IDw8IHZhbHVlIDw8ICIgIjsKCX0KCXN0ZDo6Y291dCA8PCAnXG4nOwp9Cg==