#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));
}