// Ż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; } |
English