题意:对于杨辉三角形的第n行,首先但看每一位,将其补成长度为k的数(左补0),然后将这一行连起来作为一个大数,求这个大数mod m。

题解:数学公式推导题

   1、补0实际上就是使得这个数左边的那个数乘以10的次方,那么最后答案就是Σ(C(n,m)*10^( (n-m)*k ) )%m

   2、10^(n-m)k=(10^k)^(n-m),又有个C(n,m),正好组成二项式(1+10^k)^n的展开式

   3、于是两个快速幂取模就可以解决了。

   PS:不知样例有多少,这种复杂度也能达到500MS+,快速幂取模写怂了的没准还过不了= =!

   

View Code
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 typedef long long LL;
 6 LL fastmod(LL a,LL b,LL m)
 7 {
 8     LL re = 1, y = a%m;
 9     for(; b; b>>=1,y=y*y%m)
10         if (b&1ll)re =y*re%m;
11     return re;
12 }
13 int main()
14 {
15     int T;
16     for(scanf("%d",&T);T;T--)
17     {
18         LL n,m,k;
19         scanf("%lld%lld%lld",&n,&k,&m);
20         printf("%lld\n",fastmod((fastmod(10ll,k,m)+1ll)%m,n,m));
21     }
22     return 0;
23 }