時間限制:1 s 記憶體限制:128 mb
solution:
用矩陣乘。
在向後插入數時,相當於把原答案乘10的多少次方再加上這個數,所以我們可以導成矩陣。
a矩陣 b矩陣
ans 10^j 1 0
i 0 1 1
1 0 0 1
b矩陣第一行是把ans*10^j+i,第二行是讓i加1,第三行是保持a[3]=1.
由於10^j的j不同,所以我們應分層去求。
然後我們就可以開心地矩陣快速冪了。
注意時刻取模。
附上**:
#include#include#include#include#include#includeusing namespace std;long long ans,a[10],b[10][10],n,mod;
void ksc(long long);
void hucheng();
void zicheng();
int main()
memset(b,0,sizeof(b));
b[1][1]=y;
b[1][2]=b[2][2]=b[2][3]=b[3][3]=1;
ksc(n-x/10+1);
printf("%lld",a[1]);
return 0;
}void ksc(long long x)
}void hucheng()
for(long long i=1;i<=3;i++)
a[i]=c[i];
}void zicheng()
for(long long i=1;i<=3;i++)
for(long long j=1;j<=3;j++)
b[i][j]=c[i][j];
}
HNOI2011 數學作業
hnoi2011 數學作業 小 c 數學成績優異,於是老師給小 c 留了一道非常難的數學作業題 給定正整數 n 和 m 要求計算concatenate 1.n mod m 的值,其中 concatenate 1.n 是將所有正整數 1,2,n順序連線起來得到的數。例如,n 13,concatenat...
HNOI2011 數學作業
我又對著跑出正解的程式調了好久 怕不是眼瞎了 這就是個分段矩陣,我們很容易就得到了遞推式 f i f i 1 10 k i 其中 k log i 於是就是分段矩陣 矩陣 之後就是 了,沒有加快速乘wa了好久 cpp include include include define re register...
HNOI2011 數學作業
小 c 數學成績優異,於是老師給小 c 留了一道非常難的數學作業題 給定正整數 n 和 m,要求計算 concatenate 1 n mod m 的值,其中 concatenate 1 n 是將所有正整數 1,2,n 順序連線起來得到的數。例如,n 13,concatenate 1 n 123456...