#include <algorithm>
#include <array>
#include <iostream>
template <std::size_t OUT, std::size_t IN>
std::array<int, OUT> sampling(const std::array<int, IN>& a)
{
std::array<int, OUT> res;
for (int i = 0; i != OUT - 1; ++i) {
int index = i * (IN - 1) / (OUT - 1);
int p = i * (IN - 1) % (OUT - 1);
res[i] = ((p * a[index + 1]) + (((OUT - 1) - p) * a[index])) / (OUT - 1);
}
res[OUT - 1] = a[IN - 1]; // done outside of loop to avoid out of bound access (0 * a[IN])
return res;
}
void print(const std::array<int, 77>& a)
{
for (int i = 0; i != a.size(); ++i)
std::cout << i << ":" << a[i] << std::endl;
}
int main() {
std::array<int, 100> a100;
int n(-10);
std::generate(a100.begin(), a100.end(), [&n]{ return n += 10; });
print(sampling<77>(a100));
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgT1VULCBzdGQ6OnNpemVfdCBJTj4Kc3RkOjphcnJheTxpbnQsIE9VVD4gc2FtcGxpbmcoY29uc3Qgc3RkOjphcnJheTxpbnQsIElOPiYgYSkKewogICAgIHN0ZDo6YXJyYXk8aW50LCBPVVQ+IHJlczsKCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gT1VUIC0gMTsgKytpKSB7CiAgICAgICAgIGludCBpbmRleCA9IGkgKiAoSU4gLSAxKSAvIChPVVQgLSAxKTsKICAgICAgICAgaW50IHAgPSBpICogKElOIC0gMSkgJSAoT1VUIC0gMSk7CgogICAgICAgICByZXNbaV0gPSAoKHAgKiBhW2luZGV4ICsgMV0pICsgKCgoT1VUIC0gMSkgLSBwKSAqIGFbaW5kZXhdKSkgLyAoT1VUIC0gMSk7CiAgICB9CiAgICByZXNbT1VUIC0gMV0gPSBhW0lOIC0gMV07IC8vIGRvbmUgb3V0c2lkZSBvZiBsb29wIHRvIGF2b2lkIG91dCBvZiBib3VuZCBhY2Nlc3MgKDAgKiBhW0lOXSkKICAgIHJldHVybiByZXM7Cn0KCnZvaWQgcHJpbnQoY29uc3Qgc3RkOjphcnJheTxpbnQsIDc3PiYgYSkKewoJZm9yIChpbnQgaSA9IDA7IGkgIT0gYS5zaXplKCk7ICsraSkKCXN0ZDo6Y291dCA8PCBpIDw8ICI6IiA8PCBhW2ldIDw8IHN0ZDo6ZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgICBzdGQ6OmFycmF5PGludCwgMTAwPiBhMTAwOwogICAgaW50IG4oLTEwKTsKICAgIHN0ZDo6Z2VuZXJhdGUoYTEwMC5iZWdpbigpLCBhMTAwLmVuZCgpLCBbJm5deyByZXR1cm4gbiArPSAxMDsgfSk7IAoKICAgIHByaW50KHNhbXBsaW5nPDc3PihhMTAwKSk7Cn0=