#include #include #include #include #include #include namespace XX { template class Compare, typename T> inline T& UP(T& x, const T& y){if(Compare()(y, x)) x = y; return x;} template inline T& UP(T& x, const T& y, Compare comp){if(comp(y, x)) x = y; return x;} template inline T& GT(T& x, const T& y){return UP(x, y);} template inline T& LS(T& x, const T& y){return UP(x, y);} template struct Mapper { int operator[](const T& v) { int& ret = table[v]; if(!ret) rtable[ret = table.size()] = v; return ret - 1; } template int operator()(Args... args) { return (*this)[T(args...)]; } T rev(int idx){return rtable[idx + 1];} std::map table; std::map rtable; }; template struct ReferenceArray { struct It {typename std::array::iterator it; T& operator*(){return **it;} void operator++(){it++;} bool operator!=(const It& other){return it != other.it;} }; int size()const{return _ptr.size();} It begin()const{return {_ptr.begin()};} It end()const{return {_ptr.end()};} T& operator[](int idx)const{return *_ptr[idx];} mutable std::array _ptr; }; template ReferenceArray MAKEV(T& arg1, Args&... args) {return {&arg1, &args...};} struct Range { struct It { int num, step; int operator*(){return num;} void operator++(){num += step;} bool operator!=(const It& other){return num != other.num;} }; Range(int ee):b(0),e(ee){} Range(int bb, int ee):b(bb), e(ee){} It begin(){return {b, (b < e? 1: -1)};} It end(){return {e, 0};} int b, e; }; } template struct ScanfSpecifier{}; #define DEF(T,V) template<> struct ScanfSpecifier{static constexpr const char* value = V;}; DEF(char*,"%s")DEF(int,"%d")DEF(double,"%lf")DEF(float,"%f")DEF(char,"%c")DEF(const char*,"%s")DEF(unsigned long,"%lu")DEF(unsigned int, "%u") #ifdef _MSC_VER DEF(long long int,"%I64d") #else DEF(long long int,"%lld") #endif #undef DEF template int RD(T& arg){return std::scanf(ScanfSpecifier::value, &arg);} template int RD(char (&arg)[S]){return std::scanf("%s", arg);} int RD(char* arg){return std::scanf("%s", arg);} template<> int RD(char& arg){return std::scanf(" %c", &arg);} template int RD(T& arg1, Args&... args) {return RD(arg1) + RD(args...);} template T RD(){T ret; RD(ret); return ret;} template void RDV(It begin, It end) { while(begin != end) RD(*begin++); } template void RDV(C& c) {RDV(std::begin(c), std::end(c));} template void WT(Args... args) { int alc = 0; int dummy[] = {((alc++? std::printf(" "): 0), std::printf(ScanfSpecifier::value, args), 0)...}; } template void WTL(Args... args) { WT(args...); std::printf("\n"); } template void WTV(It begin, It end) { int alc = 0; while(begin != end) (alc++? std::printf(" "): 0), WT(*begin++); } template void WTV(const C& c) {WTV(std::begin(c), std::end(c));} template void WTVL(It begin, It end) { WTV(begin, end); std::printf("\n"); } template void WTVL(const C& c) {WTVL(std::begin(c), std::end(c));} //alias template T& UMAX(T& x, T y){return XX::UP(x, y);} template T& UMIN(T& x, T y){return XX::UP(x, y);} using XX::UP; //(x,y) comp using RG = XX::Range; using XX::MAKEV; using XX::Mapper; //RD[L],RDV[L],WT[L],WTV[L] for i/o //template #include #include #include #include #include #include #include using namespace std; typedef long long int ll; int N, K; ll cost[10009]; int main() { RD(N, K); RDV(cost + 1, cost + N + 1); ll ans = -1; for(int i = 1; i <= min(K + 1, N); i++) { ll alc = cost[i]; int r = i + K + 1; while(r <= N) { if(r + K > N) { alc = -1; break; } alc += cost[r + K]; r += 2 * K + 1; } if(alc != -1 && (ans == -1 || ans > alc)) ans = alc; } WTL(ans); }