标签:nbsp bsp src www. tor name operator col opened
INPUT_1
2 10007 2 0
INPUT_2
20 10007 20 0
OUT_1
8
OUT_2
176
#include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib> #include<cstring> #define ll long long using namespace std; ll read(){ ll an=0,f=1;char ch=getchar(); while(!(‘0‘<=ch&&ch<=‘9‘)){if(ch==‘-‘)f=-f;ch=getchar();} while(‘0‘<=ch&&ch<=‘9‘){an=an*10+(ch-‘0‘);ch=getchar();} return an*f; } struct saber{ ll a[60][60]; }ans,d; ll n,p; int k,r; saber operator *(saber A,saber B){ saber c; for(int i=0;i<=50;i++) for(int j=0;j<=50;j++)c.a[i][j]=0; for(int i=0;i<k;i++) for(int j=0;j<k;j++) for(int l=0;l<k;l++) c.a[i][j]=(c.a[i][j]+A.a[i][l]*B.a[l][j])%p; if(k==1)c.a[0][0]=((ll)A.a[0][0]*B.a[0][0]+c.a[0][0])%p; return c; } saber kp(ll kk){ saber f; for(int i=0;i<=50;i++) for(int j=0;j<=50;j++)f.a[i][j]=0; for(ll i=0;i<k;i++)f.a[i][i]=1; while(kk){ if(kk&1)f=f*d; d=d*d; kk>>=1; } return f; } int main(){ n=read();p=read();k=read();r=read(); for(int i=0;i<k;i++){ d.a[i][i]=1; d.a[i][(i-1+k)%k]=1; } ans=kp(n*k); cout<<ans.a[r][0]; return 0; }
by:s_a_b_e_r
标签:nbsp bsp src www. tor name operator col opened
原文地址:http://www.cnblogs.com/ck666/p/7471117.html