// Życie ze mna gra w pokera raz zabiera raz zabiera // Może pyknie na 1 pkt i ten promil na koszulke pyknie #include <iostream> using namespace std; const int MAXN = 1000; const int MAXK = 10; // tablice przechowujące koleno przetwarzane wartosci long long tab[MAXN + 5][MAXK + 5]; void init () { tab[3][2] = 2; tab[4][2] = 16; tab[5][2] = 100; tab[6][2] = 616; tab[7][2] = 4024; tab[8][2] = 28512; tab[9][2] = 219664; tab[10][2] = 1831712; tab[11][2] = 16429152; tab[12][2] = 157552000; tab[5][3] = 4; tab[6][3] = 72; tab[7][3] = 952; tab[8][3] = 11680; tab[9][3] = 142800; tab[10][3] = 1788896; tab[11][3] = 23252832; tab[12][3] = 315549312; tab[9][4] = 160; tab[10][4] = 7680; tab[11][4] = 233792; tab[12][4] = 5898240; tab[2][1] = 2; for (int i = 3; i <= MAXN; ++i) { tab[i][1] = tab[i-1][1] * 2; } } int P, N, K; int main() { init(); cin >> N >> K >> P; if (K > 10) { cout << "0" << endl; return 0; } if (N == 1) { cout << "1" << endl; return 0; } cout << tab[N][K] % P << endl; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | // Życie ze mna gra w pokera raz zabiera raz zabiera // Może pyknie na 1 pkt i ten promil na koszulke pyknie #include <iostream> using namespace std; const int MAXN = 1000; const int MAXK = 10; // tablice przechowujące koleno przetwarzane wartosci long long tab[MAXN + 5][MAXK + 5]; void init () { tab[3][2] = 2; tab[4][2] = 16; tab[5][2] = 100; tab[6][2] = 616; tab[7][2] = 4024; tab[8][2] = 28512; tab[9][2] = 219664; tab[10][2] = 1831712; tab[11][2] = 16429152; tab[12][2] = 157552000; tab[5][3] = 4; tab[6][3] = 72; tab[7][3] = 952; tab[8][3] = 11680; tab[9][3] = 142800; tab[10][3] = 1788896; tab[11][3] = 23252832; tab[12][3] = 315549312; tab[9][4] = 160; tab[10][4] = 7680; tab[11][4] = 233792; tab[12][4] = 5898240; tab[2][1] = 2; for (int i = 3; i <= MAXN; ++i) { tab[i][1] = tab[i-1][1] * 2; } } int P, N, K; int main() { init(); cin >> N >> K >> P; if (K > 10) { cout << "0" << endl; return 0; } if (N == 1) { cout << "1" << endl; return 0; } cout << tab[N][K] % P << endl; return 0; } |