Closed ivan100sic closed 2 months ago
struct variations { struct iterator { int l, h; vector<int> a; const vector<int>& operator* () const { return a; } bool operator== (const iterator& b) const { return tie(l, h, a) == tie(b.l, b.h, b.a); } bool operator!= (const iterator& b) const { return !(*this == b); } iterator& operator++ () { int i = (int)a.size() - 1; a[i]++; while (i && a[i] > h) { a[i] = l; a[--i]++; } return *this; } }; int n, k, l; variations(int n, int k, int l = 0) : n(n), k(k), l(l) {} iterator begin() { return {l, l+k-1, vector<int>(n, l)}; } iterator end() { vector<int> e(n, l); e[0] = l+k; return {l, l+k-1, move(e)}; } };
Closed by #23