标签:second bit lld signed can output puts friend cond
#include<bits/stdc++.h> #define reg register int #define il inline #define fi first #define se second #define mk(a,b) make_pair(a,b) #define numb (ch^‘0‘) #define pb push_back #define solid const auto & #define enter cout<<endl #define pii pair<int,int> using namespace std; typedef long long ll; template<class T>il void rd(T &x){ char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch==‘-‘)&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);} template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+‘0‘);} template<class T>il void ot(T x){if(x<0) putchar(‘-‘),x=-x;output(x);putchar(‘ ‘);} template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar(‘\n‘);} namespace Modulo{ int mod=1e9+7; int ad(int x,int y){return (x+y)>=mod?x+y-mod:x+y;} void inc(int &x,int y){x=ad(x,y);} int mul(int x,int y){return (ll)x*y%mod;} void inc2(int &x,int y){x=mul(x,y);} int qm(int x,int y=mod-2){int ret=1;while(y){if(y&1) ret=mul(x,ret);x=mul(x,x);y>>=1;}return ret;} template<class ...Args>il int ad(const int a,const int b,const Args &...args) {return ad(ad(a,b),args...);} template<class ...Args>il int mul(const int a,const int b,const Args &...args) {return mul(mul(a,b),args...);} } using namespace Modulo; namespace Miracle{ const int N=20; ll m,n; ll c; struct tr{ ll a[N][N]; void scan(){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%lld",&a[i][j]); } void init(){ memset(a,0,sizeof a); } void pre(){ for(int i=1;i<=n;i++) a[i][i]=1; } void op(){ for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) printf("%lld ",a[i][j]); puts(""); } cout<<endl; } tr friend operator *(tr a,tr b){ tr c;c.init(); // a.op(); // b.op(); for(int i=1;i<=n;i++) for(int k=1;k<=n;k++) for(int j=1;j<=n;j++) c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j])%mod; // c.op(); return c; } }S,A,B,T; tr qt(tr a,ll y){ // cout<<" y "<<y<<endl; // cout<<" a "<<endl; // a.op(); tr ret;ret.pre(); tr base;base=a; while(y){ if(y&1) ret=ret*base; base=base*base; y>>=1; } return ret; } int main(){ int f1,f2,f3; rd(m);rd(f1);rd(f2);rd(f3);rd(c); B.init(); B.a[1][1]=B.a[2][1]=B.a[3][1]=B.a[1][2]=B.a[2][3]=B.a[4][4]=B.a[5][4]=B.a[5][5]=1; B.a[4][1]=2; S.init(); S.a[1][4]=1;S.a[1][5]=1; mod-=1; n=5; // B.op(); // S.op(); T=S*qt(B,m-3); // T.op(); ++mod; ll ans=qm(c,T.a[1][1]); // cout<<" ans1 "<<ans<<endl; S.init(); B.init(); n=9; B.a[1][1]=B.a[2][1]=B.a[3][1]=B.a[4][4]=B.a[5][4]=B.a[6][4]=B.a[7][7]=B.a[8][7]=B.a[9][7]=1; B.a[1][2]=B.a[2][3]=B.a[4][5]=B.a[5][6]=B.a[7][8]=B.a[8][9]=1; S.a[1][1]=S.a[1][5]=S.a[1][9]=1; --mod; T=S*qt(B,m-3); // T.op(); ++mod; ans=mul(ans,qm(f1,T.a[1][7]),qm(f2,T.a[1][4]),qm(f3,T.a[1][1])); ot(ans); return 0; } } signed main(){ Miracle::main(); return 0; } /* Author: *Miracle* */
标签:second bit lld signed can output puts friend cond
原文地址:https://www.cnblogs.com/Miracevin/p/11006948.html