#include <iostream>
using namespace std;
template<class T, size_t Length> struct Sum {
template<class Array>
static T comp(const Array &x, T add = 0) {
return Sum<T, Length - 1>::comp(x, add + Length * x[Length - 1]);
}
};
template<class T> struct Sum<T, 0> {
template<class Array>
static T comp(const Array &x, T add = 0) {
return add;
}
};
constexpr int d[] = { 0, 1, 1, 0, 1 };
constexpr int e[] = { 1, 0, 3, 2, 4 };
template<int N> struct Comp {
template<class Array>
static int comp(const Array &x) {
return d[N] ? Sum<int, e[N]>::comp(x) : 10;
}
};
int main() {
int x[] = { 1, 3, 5, 7, 9 };
cout << Comp<0>::comp(x) << endl;
cout << Comp<1>::comp(x) << endl;
cout << Comp<2>::comp(x) << endl;
cout << Comp<3>::comp(x) << endl;
cout << Comp<4>::comp(x) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IExlbmd0aD4gc3RydWN0IFN1bSB7Cgl0ZW1wbGF0ZTxjbGFzcyBBcnJheT4KCXN0YXRpYyBUIGNvbXAoY29uc3QgQXJyYXkgJngsIFQgYWRkID0gMCkgewoJCXJldHVybiBTdW08VCwgTGVuZ3RoIC0gMT46OmNvbXAoeCwgYWRkICsgTGVuZ3RoICogeFtMZW5ndGggLSAxXSk7Cgl9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgU3VtPFQsIDA+IHsKCXRlbXBsYXRlPGNsYXNzIEFycmF5PgoJc3RhdGljIFQgY29tcChjb25zdCBBcnJheSAmeCwgVCBhZGQgPSAwKSB7CgkJcmV0dXJuIGFkZDsKCX0KfTsKCmNvbnN0ZXhwciBpbnQgZFtdID0geyAwLCAxLCAxLCAwLCAxIH07CmNvbnN0ZXhwciBpbnQgZVtdID0geyAxLCAwLCAzLCAyLCA0IH07Cgp0ZW1wbGF0ZTxpbnQgTj4gc3RydWN0IENvbXAgewoJdGVtcGxhdGU8Y2xhc3MgQXJyYXk+CglzdGF0aWMgaW50IGNvbXAoY29uc3QgQXJyYXkgJngpIHsKCQlyZXR1cm4gZFtOXSA/IFN1bTxpbnQsIGVbTl0+Ojpjb21wKHgpIDogMTA7Cgl9Cn07CgppbnQgbWFpbigpIHsKCWludCB4W10gPSB7IDEsIDMsIDUsIDcsIDkgfTsKCQoJY291dCA8PCBDb21wPDA+Ojpjb21wKHgpIDw8IGVuZGw7Cgljb3V0IDw8IENvbXA8MT46OmNvbXAoeCkgPDwgZW5kbDsKCWNvdXQgPDwgQ29tcDwyPjo6Y29tcCh4KSA8PCBlbmRsOwoJY291dCA8PCBDb21wPDM+Ojpjb21wKHgpIDw8IGVuZGw7Cgljb3V0IDw8IENvbXA8ND46OmNvbXAoeCkgPDwgZW5kbDsKCQoJcmV0dXJuIDA7Cn0=