【BZOJ2326】【codevs2314】数学作业,第100篇博文纪念

来源:互联网 发布:lol选手符文天赋 知乎 编辑:程序博客网 时间:2024/04/29 18:50

传送门1
传送门2
写在前面:标志性的~
思路:好久以前写的?好像忘记了……请原谅我吧!当时的我好像也是看着黄学长的blog写的

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define LL long longusing namespace std;LL n;int m;struct matrix{    LL a[4][4];    void clear()    {        for (int i=1;i<=3;i++)        for (int j=1;j<=3;j++) a[i][j]=0;    }    void fill() {a[2][1]=a[3][1]=a[2][2]=a[3][2]=a[3][3]=1;}}x,ans;matrix get(matrix x,matrix y){    matrix z;    z.clear();    for (int i=1;i<=3;i++)    for (int j=1;j<=3;j++)    for (int k=1;k<=3;k++)    z.a[i][j]=(z.a[i][j]+(x.a[i][k]%m)*(y.a[k][j]%m)%m)%m;    return z;}void qr(matrix x,LL y,LL z){    LL cs=z-y/10+1;    x.clear();    x.a[1][1]=y;    x.fill();    while (cs)    {        if (cs%2) ans=get(ans,x);        x=get(x,x);        cs/=2;    }}main() {    scanf("%lld%d",&n,&m);    for (int i=1;i<=3;i++) ans.a[i][i]=1;    LL t=10;    while (t<=n) qr(x,t,t-1),t*=10;    qr(x,t,n);    printf("%lld",ans.a[3][1]);}
0 0
原创粉丝点击