#include #include #define MOD 1000000007 long find_ways(long N, long K) { long i, j; long* counts = malloc(sizeof(long) * N); long* tmp = malloc(sizeof(long) * N); for (i = 0; i < N; i++) { counts[i] = 0; tmp[i] = 0; } counts[0] = 1; for (i = 1; i <= K; i++) { for (j = 0; j < N; j++) { long l = j - i, r = j + i; // Modulo může dát záporný výsledek, tak mu v tom zabraňme. l = (N + (l % N)) % N; r %= N; tmp[j] = (counts[l] + counts[r]) % MOD; } // Prohodíme dočasné pole s pracovním: ze způsobů, // které jsme právě spočítali, budeme stavět způsoby // pro další den. long* _tmp = tmp; tmp = counts; counts = _tmp; } long result = counts[0]; free(counts); free(tmp); return result; }