Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int d[31][31][31];
- int NO_ANSWER = -1;
- int findAnswer(int a, int b, int c, int m) {
- if (d[a][b][c] != NO_ANSWER)
- return d[a][b][c];
- if (a <= 0 || b <= 0 || c <= 0)
- return d[a][b][c] = 1;
- if (a > 30)
- findAnswer(30, b, c, m);
- if (b > 30)
- findAnswer(a, 30, c, m);
- if (c > 30)
- findAnswer(a, b, 30, m);
- if (a > b && a > c) {
- d[a][b][c] = (findAnswer(a - 2, b, c, m) + findAnswer(a - 1, b - 1, c, m) + findAnswer(a - 1, b, c - 1, m)) % m;
- }
- else {
- if (b > a && b > c) {
- d[a][b][c] = (findAnswer(a, b - 2, c, m) + findAnswer(a, b - 1, c, m) + findAnswer(a, b - 1, c - 1, m)) % m;
- }
- else {
- if (c > a && c > b) {
- d[a][b][c] = (findAnswer(a, b, c - 3, m) + findAnswer(a - 1, b, c - 1, m) + findAnswer(a, b - 1, c - 1, m)) % m;
- }
- else {
- d[a][b][c] = (findAnswer(a - 1, b, c, m) + findAnswer(a, b - 1, c, m) + findAnswer(a, b, c - 1, m)) % m;
- }
- }
- }
- return d[a][b][c];
- }
- int main() {
- int a, b, c, m;
- scanf("%d %d %d %d", &a, &b, &c, &m);
- for (int i = 0; i < 31; i++) {
- for (int j = 0; j < 31; j++) {
- for (int k = 0; k < 31; k++) {
- d[i][j][k] = NO_ANSWER;
- }
- }
- }
- printf("%d", findAnswer(a, b, c, m));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement