generator 1(2019年牛客多校第五场B题+十进制矩阵快速幂)


目录
  • 题目链接
  • 思路
  • 代码

题目链接

传送门

思路

十进制矩阵快速幂。

代码

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

typedef long long LL;
typedef pair pLL;
typedef pair pLi;
typedef pair pil;;
typedef pair pii;
typedef unsigned long long uLL;

#define lson (rt<<1),L,mid
#define rson (rt<<1|1),mid + 1,R
#define lowbit(x) x&(-x)
#define name2str(name) (#name)
#define bug printf("*********\n")
#define debug(x) cout<<#x"=["<>= 1;
    }
    return b;
}

int main() {
#ifndef ONLINE_JUDGE
    FIN;
#endif
    memset(x.a, 0, sizeof(x.a));
    scanf("%d%d%d%d", &x.a[0][1], &x.a[0][0], &A[1].a[0][0], &A[1].a[1][0]);
    A[1].a[0][1] = 1;
    scanf("%s%d", s + 1, &MOD);
    for(int i = 2; i <= 9; ++i) A[i] = A[i-1] * A[1];
    int n = strlen(s + 1);
    matrix ans = A[s[1]-'0'];
    for(int i = 2; i <= n; ++i) {
        ans = qpow(ans, 10);
        if(s[i] > '0') {
            ans = ans * A[s[i]-'0'];
        }
    }
    ans = x * ans;
    printf("%d\n", ans.a[0][1]);
    return 0;
}

相关