2015年吉林省賽 Pin Pin Pin(矩陣快速冪)
題意:
我們把1~n的數連著寫起來組成一個數,然後對1000000007取模f[1]=1,f[2]=12,..,f[9]=123456789...
n<=1e9,很明顯我們可以得到一個遞推式,f[n] = f[n-1]*k +n (k=10^(len(n))),由於n比較大我們需要用到矩陣來進行優化。
程式碼如下:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long LL;
const LL mod = 1e9+7;
const int maxn = 3;
struct matrix {
LL m[maxn][maxn];
matrix() {
memset(m,0,sizeof(m));
}
matrix operator*(const struct matrix &A)const {
matrix C;
for(int i=0; i<maxn; i++) {
for(int j=0; j<maxn; j++) {
for(int k=0; k<maxn; k++) {
C.m[i][j]=(C.m[i][j]+A.m[i][k]*m[k][j]%mod)%mod;
}
}
}
return C;
}
friend matrix operator ^ (matrix a,int k) {
matrix ans;
for(int i = 0; i<maxn; i++)
ans.m[i][i]=1;
while(k) {
if(k&1) ans = ans*a;
k>>=1;
a=a*a;
}
return ans;
}
};
LL a[11];
matrix I;
void init() {
a[0]=1;
for(int i=1; i<11; i++) {
a[i]=a[i-1]*(LL)10;
}
for(int i=0; i<maxn; i++) {
I.m[i][i]=1;
}
}
int main() {
init();
int t,n;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
matrix ans=I;
matrix A;
A.m[0][1]=1,A.m[0][2]=1;
A.m[1][1]=1,A.m[1][2]=1;
A.m[2][2]=1;
for(int i=0; i<11&&a[i]<=n; i++) {
int num;
A.m[0][0]=a[i+1];
if(a[i+1]<=n) num = a[i+1]-a[i];
else num = n-a[i]+1;
ans=ans*(A^num);
}
printf("%lld\n",ans.m[0][2]);
}
return 0;
}
相關文章
- flask算pinFlask
- Intel Pin初探Intel
- 【AD報錯】GND contains Output Pin and Power Pin objectsAIObject
- ORACLE LOCK,LATCH,PINOracle
- pad&pin
- OMAP-L138 + FPGA開發板(Pin-To-Pin國產FPGA)FPGA
- 矩陣快速冪矩陣
- Oracle 之pin和lockOracle
- cursor: pin S 等待事件事件
- servo_led共用pin
- cursor pin S wait on XAI
- cursor: pin S wait on XAI
- 【等待事件】library cache pin事件
- 等待事件--library cache pin事件
- cursor:pin S wait on XAI
- library cache pin等待分析
- library cache pin 等待事件事件
- win10 如何跳過建立pin win10 如何跳過設定pinWin10
- 矩陣快速冪(快忘了)矩陣
- 矩陣快速冪總結矩陣
- win10設定pin的方法_win10系統如何設定pin碼Win10
- win10怎麼跳過pin設定_win10如何取消開機pinWin10
- win10如何取消pin碼登入_windows10怎麼取消pin登陸Win10Windows
- win10如何取消pin碼Win10
- 學習Oracle核心(cursor: pin S)Oracle
- 【鎖】Latch、lock、 pin的區別
- Cursor pin S wait on X 事件AI事件
- win10 pin碼忘記如何修改_win10 pin碼忘記怎麼修改Win10
- 設定pin碼是什麼意思 剛買的電腦pin碼怎麼設定
- 【矩陣乘法】【快速冪】遞推矩陣
- 矩陣快速冪加速最短路矩陣
- win10提示無法設定你的pin怎麼辦_win10設定pin提示無法設定你的pin解決步驟Win10
- win10如何取消開機密碼pin_win10怎麼取消pin碼登入Win10密碼
- Win10系統怎麼刪除pin碼 win10刪除pin碼的方法Win10
- 解決library cache pin等待事件事件
- Trouble shooting for Pin S wait on XAI
- enq:Library cache lock/pin等待事件ENQ事件
- library cache pin 阻塞程式查詢