193522025-12-04 23:53:2942Járdakövezés háromféle elemmelcpp17Elfogadva 30/302ms508 KiB
#include <bits/stdc++.h>
using namespace std;

const long long MOD = 2023;

struct Mat {
    long long a[4][4];
    Mat() {
        memset(a, 0, sizeof(a));
    }
};

Mat mul(const Mat& A, const Mat& B) {
    Mat C;
    for (int i = 0; i < 4; i++) {
        for (int k = 0; k < 4; k++) {
            long long ak = A.a[i][k];
            if (ak == 0) continue;
            for (int j = 0; j < 4; j++) {
                C.a[i][j] = (C.a[i][j] + ak * B.a[k][j]) % MOD;
            }
        }
    }
    return C;
}

Mat mat_pow(Mat base, long long exp) {
    Mat R;
    for (int i = 0; i < 4; i++) R.a[i][i] = 1;
    while (exp > 0) {
        if (exp & 1) R = mul(R, base);
        base = mul(base, base);
        exp >>= 1;
    }
    return R;
}

int ways(int N) {
    if (N == 0) return 1;

    Mat T;
    int t[4][4] = {
        {2,2,2,3},
        {1,0,1,1},
        {1,1,0,1},
        {1,0,0,0}
    };
    for (int i=0;i<4;i++)
        for (int j=0;j<4;j++)
            T.a[i][j] = t[i][j];

    Mat M = mat_pow(T, N);
    return M.a[0][0];
}

int main() {
    int N;
    cin >> N;
    cout << ways(N) << "\n";
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base30/30
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms508 KiB
5Elfogadva2/22ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms316 KiB
8Elfogadva2/21ms316 KiB
9Elfogadva2/21ms508 KiB
10Elfogadva2/21ms316 KiB
11Elfogadva2/21ms332 KiB
12Elfogadva3/31ms316 KiB
13Elfogadva3/31ms316 KiB
14Elfogadva3/31ms316 KiB
15Elfogadva3/31ms316 KiB