HDU 2604 Queuing
Chieh
posted @ 2015年8月25日 12:34
in NO Answer No Speak
, 218 阅读
/* Author:Chieh Because Of Coding */ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <vector> #include <stack> #include <map> #include <set> #define LL long long #define INF 1e9 #define EPS 1e-9 using namespace std; const int maxn=1234567; int k,M; int m[maxn][2]; int f[maxn]; int C[71][31]; void init() { m[0][0]=C[0][M]; m[0][1]=C[0][M]; m[1][0]=C[1][M]; m[1][1]=C[0][M]; f[1]=C[1][M]; m[2][0]=C[1][M]; m[2][1]=C[1][M]; f[2]=C[2][M]; for(int i=3; i<=k; i++) { m[i][0]=C[m[i-1][0]+m[i-1][1]][M]; m[i][1]=f[i-1]; f[i]=m[i-2][1]; f[i]=C[f[i]+C[m[i-2][0]*2][M]][M]; } } void play() { printf("%d\n",(m[k][0]+m[k][1]+f[k])%M); } int main() { for(int i=0; i<=70; i++) { for(int j=1; j<=30; j++) { C[i][j]=i%j; } } while(scanf("%d%d",&k,&M)!=EOF) { init(); play(); } // cout << "Hello world!" << endl; return 0; } /* Author:Chieh Because Of Coding */ // dp[i]=dp[i-1]+dp[i-3]+dp[i-4] #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <vector> #include <stack> #include <map> #include <set> #define LL long long #define INF 1e9 #define EPS 1e-9 using namespace std; struct matrix { int e[4][4]; }; matrix Cal(matrix p,matrix q,int len,int MOD) { matrix c; for(int i=0; i<len; i++) { for(int j=0; j<len; j++) { c.e[i][j]=0; for(int k=0; k<len; k++) { c.e[i][j]=(c.e[i][j]+(p.e[i][k]*q.e[k][j]%MOD))%MOD; } } } return c; } int M; int k; matrix s,a; void init() { for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ if(i==j)s.e[i][j]=1; else s.e[i][j]=0; if(i!=1&&j==0)a.e[i][j]=1; else if(i+1==j)a.e[i][j]=1; else a.e[i][j]=0; } } } void exp_pow(int b) { while(b){ if(b&1)s=Cal(s,a,4,M); a=Cal(a,a,4,M); b>>=1; } } int ai[4]; void play() { if(k<=4)printf("%d\n",ai[k-1]%M); else{ k=k-4; exp_pow(k); int ans=0; for(int i=0;i<4;i++){ ans=(ans+((ai[3-i]*s.e[i][0])%M))%M; } printf("%d\n",ans); } } int main() { ai[0]=2; ai[1]=4; ai[2]=6; ai[3]=9; while(scanf("%d%d",&k,&M)!=EOF) { init(); play(); } // cout << "Hello world!" << endl; return 0; }