ZROI1119 十一·联考幸福

Posted gavinzheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZROI1119 十一·联考幸福相关的知识,希望对你有一定的参考价值。

ZROI1119 【十一·联考】幸福

传送门

一道矩阵快速幂。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
#include<cmath>
const int mod=998244353;
using namespace std;
struct matrix {
    ll data[7][7];
    void clear() {
        //for(int i=1;i<=5;i++)for(int j=1;j<=5;j++)data[i][j]=0;
        memset(data,0,sizeof(data));
    }
};
inline matrix operator * (matrix &a,matrix &b) {
    static matrix ans;ans.clear();
    for(int i=1;i<=5;i++) {for(int j=1;j<=5;j++) {for(int k=1;k<=5;k++) {ans.data[i][j]+=a.data[k][j]*b.data[i][k];ans.data[i][j]%=mod;}}}
    return ans;
}
matrix blank,re,E;
void init() {
    //re_n=2
    for(int i=1;i<=5;i++)E.data[i][i]=1;
    re.data[1][1]=1;
    re.data[2][1]=2;
    re.data[3][1]=1;
    re.data[4][1]=1;
    re.data[5][1]=3;
    blank.data[1][2]=1;blank.data[2][1]=1;blank.data[2][2]=1;blank.data[2][3]=1;blank.data[2][4]=1;blank.data[3][4]=1;
    blank.data[4][3]=1;blank.data[4][4]=1;blank.data[5][1]=1;blank.data[5][2]=1;blank.data[5][3]=1;blank.data[5][4]=1;blank.data[5][5]=1;
};
ll n;
matrix ksm(ll time) {
    matrix ans,cur;ans.clear();ans=E;cur=blank;
    for(;time;time>>=1,cur=cur*cur){
        if(time&1)ans=ans*cur;
    }
    return ans;
}
int main() {
    init();
    scanf("%lld",&n);
    if(n==1){printf("3");return 0;}
    matrix add=ksm(n-1);
    add=re*add;
    printf("%lld",add.data[5][1]);
    return 0;
}

技术图片

以上是关于ZROI1119 十一·联考幸福的主要内容,如果未能解决你的问题,请参考以下文章

19CSP-S十一集训三地联考—众神归位 题解总结

[九省联考2018]秘密袭击coat 伪·题解

Python笔记·第十一章—— 函数 装饰器

19CSP-S十一集训三地联考—众神归位

哈佛幸福课·健康之道锻炼的真相

助推:如何做出有关健康财富与幸福的最佳决策(2017年诺贝尔经济学奖获得者理查德·泰勒作品)