• 十进制快速幂(牛客多校第五场)-- generator 1


    思路:

    十进制快速幂。

     1 #include <stdio.h>//sprintf
     2 #include <cstdlib>////malloc  exit strcat itoa system("cls")
     3 #include <iostream>//pair
     4 #include <fstream>
     5 #include <bitset>
     6 //#include <map>   https://ac.nowcoder.com/acm/contest/885/B
     7 #include <vector>
     8 #include <stack>
     9 #include <set>
    10 #include <string.h>//strstr
    11 #include <string>
    12 #include <time.h>//srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
    13 #include <cmath>
    14 #include <queue>//priority_queue<long long, vector<long long>, greater<long long> > q;
    15 #include <vector>
    16 //#include <math.h>
    17 //#include <windows.h>   https://www.nitacm.com/problem_show.php?pid=222
    18 #include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
    19 using namespace std;
    20 #define pr printf
    21 #define sc scanf
    22 #define fo(a,b,c) for((a)=(b);(a)<=(c);(a)++)//register long long i
    23 #define fr(a,b,c) for((a)=(b);(a)>=(c);(a)--)
    24 #define mem(a,b) memset((a),(b),sizeof((a)))
    25 const double e=2.718281828;
    26 const double PI=acos(-1.0);
    27 const double ESP=1e-6;
    28 const long long inf=99999999;
    29 const long long N=1000006;
    30 long long mod;
    31 const long long MAXN=3;
    32 
    33 long long x0,x1,a,b,MOD;
    34 struct MAT
    35 {
    36     long long mat[MAXN][MAXN];
    37     MAT()
    38     {
    39         mat[1][1]=mat[2][2]=1;//对角矩阵 E;
    40         mat[2][1]=mat[1][2]=0;
    41     }
    42     MAT operator*(const MAT &a)const
    43     {
    44         MAT b;
    45         long long i,j,k;
    46         mem(b.mat,0);
    47         fo(i,1,MAXN-1)
    48         {
    49             fo(j,1,MAXN-1)
    50             {
    51                 fo(k,1,MAXN-1)
    52                 {
    53                     b.mat[i][j]=(b.mat[i][j]+mat[i][k]*a.mat[k][j]);
    54                     b.mat[i][j]%=mod;
    55                 }
    56             }
    57         }
    58         return b;
    59     }
    60 }transfer;
    61 
    62 MAT Mqpow(MAT x,long long n)
    63 {
    64     struct MAT temp;
    65     while(n)
    66     {
    67         if(n&1)
    68             temp=temp*x;
    69         x=x*x;
    70         n>>=1;
    71     }
    72     return temp;
    73 }
    74 
    75 char n[N];
    76 struct MAT mark[30],start;
    77 int main()
    78 {
    79     sc("%lld%lld%lld%lld%s%lld",&x0,&x1,&a,&b,n,&MOD);
    80 //    mem(transfer.mat,0);
    81     mod=MOD;
    82     transfer.mat[1][1]=a,transfer.mat[1][2]=b;
    83     transfer.mat[2][1]=1,transfer.mat[2][2]=0;
    84     start.mat[1][1]=x1,start.mat[2][1]=x0;
    85     mark[1]=transfer;
    86     for(int i=2;i<=9;++i)
    87         mark[i]=transfer*mark[i-1];
    88     int l=strlen(n);
    89     struct MAT ans;
    90     for(int i=0;i<=l-1;++i)
    91     {
    92         ans=Mqpow(ans,10);
    93         ans=ans*mark[n[i]-'0'];
    94     }
    95     start=ans*start;
    96     pr("%lld
    ",start.mat[2][1]%MOD);
    97     return 0;
    98 }
  • 相关阅读:
    [手游新项目历程]-36- error: stray ‘357’ in program
    广告学(一)
    VMware的Unity模式
    poj3709
    poj1849
    bzoj2007
    bzoj3209
    bzoj2466,poj1222
    bzoj1016
    bzoj2186
  • 原文地址:https://www.cnblogs.com/--HPY-7m/p/11437911.html
Copyright © 2020-2023  润新知