Submission

Status:

(PPPPPPPPPP)(PPPPP)(PPPPP)(PPPPPPPPPP)

Subtask/Task Score:

{20/20}{30/30}{30/30}{20/20}

Score: 100

User: meme_boi2

Problemset: กองไฟ

Language: cpp

Time: 0.060 second

Submitted On: 2026-03-20 09:21:47

#include <bits/stdc++.h>
using namespace std;
#define int long long
int mod = 1e9 + 7;
int dp[3][3][151][151][151];
int32_t main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    int n;
    cin >> n;
    int a, b, c;
    cin >>a >> b >> c;
    for(int  i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            array<int,3> arr = {0,0,0}; 
            if(i == j){
                arr[i] = 2;
                dp[i][j][arr[0]][arr[1]][arr[2]] = 0;
            }else{
                arr[i] = 1;
                arr[j] = 1;
                dp[i][j][arr[0]][arr[1]][arr[2]] = 1;
            }
        }
    }
    for(int i = 3; i <=n; i++){
        for(int j = 0; j < i; j++){
            for(int k =0; k < i; k++){
                int t = i - j - k;
                if(t < 0) continue;
                if(j - 1 >= 0) dp[0][0][j][k][t] = (dp[0][1][j-1][k][t] + dp[0][2][j-1][k][t])%mod;
                if(k - 1 >= 0) dp[0][1][j][k][t] = (dp[0][0][j][k-1][t] + dp[0][2][j][k-1][t])%mod;
                if(t - 1 >= 0) dp[0][2][j][k][t] = (dp[0][0][j][k][t-1] + dp[0][1][j][k][t-1])%mod;

                if(j - 1 >= 0) dp[1][0][j][k][t] = (dp[1][1][j-1][k][t] + dp[1][2][j-1][k][t])%mod;
                if(k - 1 >= 0) dp[1][1][j][k][t] = (dp[1][0][j][k-1][t] + dp[1][2][j][k-1][t])%mod;
                if(t - 1 >= 0) dp[1][2][j][k][t] = (dp[1][0][j][k][t-1] + dp[1][1][j][k][t-1])%mod;

                if(j - 1 >= 0) dp[2][0][j][k][t] = (dp[2][1][j-1][k][t] + dp[2][2][j-1][k][t])%mod;
                if(k - 1 >= 0) dp[2][1][j][k][t] = (dp[2][0][j][k-1][t] + dp[2][2][j][k-1][t])%mod;
                if(t - 1 >= 0) dp[2][2][j][k][t] = (dp[2][0][j][k][t-1] + dp[2][1][j][k][t-1])%mod;
            }
        }
    }
    cout << (dp[0][1][a][b][c] + dp[0][2][a][b][c] + dp[1][0][a][b][c] + dp[1][2][a][b][c] + dp[2][0][a][b][c] + dp[2][1][a][b][c])%mod;
}
/*
c2_su64_bonfire

cd "c:\Users\RICOH-NB110\Desktop\Computer Programing\gchan\" ; if ($?) { g++ c2_su64_bonfire.cpp -o c2_su64_bonfire } ; if ($?) { .\c2_su64_bonfire}
*/