#include <vector>
#include <list>
#include <iostream>
using namespace std;
vector<vector<int>> split(const vector<int>& v, size_t n)
{
vector<vector<int>> r;
for(size_t i = 0, S = v.size(), m = (S+n-1)/n; i < m; ++i)
r.emplace_back(v.begin()+i*n,v.begin()+i*n+(i==m-1&&S%n?S%n:n));
return r;
}
template<typename Iterator>
vector<vector<typename Iterator::value_type>>
split(Iterator b, Iterator e, size_t n)
{
vector<vector<typename Iterator::value_type>> r;
while(b != e)
{
Iterator start = b;
size_t m = n;
while(m-- && b != e) b = next(b);
r.emplace_back(start,b);
}
return r;
}
int main(int argc, char * argv[])
{
for(auto a: split({1,2,3,4,5,6,7,8,9,10},3))
{
for(auto b: a) cout << b << " ";
cout << "\n";
}
list<int> L = {1,2,3,4,5,6,7,8,9,10};
for(auto a: split(L.begin(),L.end(),3))
{
for(auto b: a) cout << b << " ";
cout << "\n";
}
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8dmVjdG9yPGludD4+IHNwbGl0KGNvbnN0IHZlY3RvcjxpbnQ+JiB2LCBzaXplX3QgbikKewogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiByOwogICAgZm9yKHNpemVfdCBpID0gMCwgUyA9IHYuc2l6ZSgpLCBtID0gKFMrbi0xKS9uOyBpIDwgbTsgKytpKQogICAgICAgIHIuZW1wbGFjZV9iYWNrKHYuYmVnaW4oKStpKm4sdi5iZWdpbigpK2kqbisoaT09bS0xJiZTJW4/UyVuOm4pKTsKICAgIHJldHVybiByOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KdmVjdG9yPHZlY3Rvcjx0eXBlbmFtZSBJdGVyYXRvcjo6dmFsdWVfdHlwZT4+CiAgICBzcGxpdChJdGVyYXRvciBiLCBJdGVyYXRvciBlLCBzaXplX3QgbikKewogICAgdmVjdG9yPHZlY3Rvcjx0eXBlbmFtZSBJdGVyYXRvcjo6dmFsdWVfdHlwZT4+IHI7CiAgICB3aGlsZShiICE9IGUpCiAgICB7CiAgICAgICAgSXRlcmF0b3Igc3RhcnQgPSBiOwogICAgICAgIHNpemVfdCBtID0gbjsKICAgICAgICB3aGlsZShtLS0gJiYgYiAhPSBlKSBiID0gbmV4dChiKTsKICAgICAgICByLmVtcGxhY2VfYmFjayhzdGFydCxiKTsKICAgIH0KICAgIHJldHVybiByOwp9CgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCnsKICAgIGZvcihhdXRvIGE6IHNwbGl0KHsxLDIsMyw0LDUsNiw3LDgsOSwxMH0sMykpCiAgICB7CiAgICAgICAgZm9yKGF1dG8gYjogYSkgY291dCA8PCBiIDw8ICIgICI7CiAgICAgICAgY291dCA8PCAiXG4iOwogICAgfQogICAgbGlzdDxpbnQ+IEwgPSB7MSwyLDMsNCw1LDYsNyw4LDksMTB9OwogICAgZm9yKGF1dG8gYTogc3BsaXQoTC5iZWdpbigpLEwuZW5kKCksMykpCiAgICB7CiAgICAgICAgZm9yKGF1dG8gYjogYSkgY291dCA8PCBiIDw8ICIgICI7CiAgICAgICAgY291dCA8PCAiXG4iOwogICAgfQp9Cg==