1 条题解

  • 0
    @ 2025-6-15 20:32:50
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    using namespace std;
    #define inf 0x3f3f3f3f
    #define mod 10000
    typedef vector<int> vec;
    typedef vector<vec> mat;
    
    mat mul(mat &A, mat &B)
    {
        mat C(A.size(), vec(B[0].size()));
        for (int i = 0; i < A.size(); i++)
        {
            for (int k = 0; k < B.size(); k++)
            {
                for (int j = 0; j < B[0].size(); j++)
                {
                    C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % mod;
                }
            }
        }
        return C;
    }
    
    mat pow(mat A, int n)
    {
        mat B(A.size(), vec(A.size()));
        for (int i = 0; i < A.size(); i++) B[i][i] = 1;
        while (n)
        {
            if (n & 1) B = mul(B, A);
            A = mul(A, A);
            n >>= 1;
        }
        return B;
    }
    
    int main()
    {
        int n;
        while (~scanf("%d", &n) && n != -1)
        {
            mat A(2, vec(2));
            A[0][0] = 1, A[0][1] = 1;
            A[1][0] = 1, A[1][1] = 0;
            A = pow(A, n);
            printf("%d\n", A[0][1]);
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    2071
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者