Zadanie z kombinatoryki (chyba) na ile różnych sposobów można wejść na wierzołek czworościanu foremnego[CodeForces]

0

Mam takie zdanie: https://codeforces.com/problemset/problem/166/E
I rozwiązanie do niego: https://codeforces.com/blog/entry/4173
Z rozwiązania rozumiem, że można być w 4 miejscach i miejsca ABC nie różnią się niczym. Nie rozumiem co oznaczają te nazwy zmiennych i dlaczego to działa

int zD = 1;
int zABC = 0;
for (int i = 1; i <= n; i++) {
	int nzD = zABC * 3LL % MOD;
	int nzABC = (zABC * 2LL + zD) % MOD;
	zD = nzD;
	zABC = nzABC;
}
cout << zD;

Czy ktoś mógłby pomóc mi zrozumieć dlaczego to działa, co się w tym kodzie dzieje i napisać nazwy zmiennych na czytelniejsze ?

0

W załączniku umiesczam szkic dowodu
dowod.jpg

#include <iostream>

template <typename T>
T modpow(T base, T exp, T modulus) {
  base %= modulus;
  T result = 1;
  while (exp > 0) {
    if (exp & 1) result = (result * base) % modulus;
    base = (base * base) % modulus;
    exp >>= 1;
  }
  return result;
}

int main() {
	long long n;
	std::cin >> n;
	std::cout << (n == 1 ? 0 : abs(((3+modpow(-3ll, n, 1000000007ll))%1000000007ll)*250000002ll%1000000007ll));
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1