码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 P1313 计算系数 题解

时间:2017-09-12 22:06:29      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:span   line   return   c代码   through   多项式   展开   ble   www   

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置。

题目链接:https://www.luogu.org/problem/show?pid=1313

题目描述

给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数。

输入输出格式

输入格式:

输入文件名为factor.in。

共一行,包含5 个整数,分别为 a ,b ,k ,n ,m,每两个整数之间用一个空格隔开。

输出格式:

输出共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。

输入输出样例

输入样例#1:
1 1 3 1 2
输出样例#1:
3

说明

【数据范围】

对于30% 的数据,有 0 ≤k ≤10 ;

对于50% 的数据,有 a = 1,b = 1;

对于100%的数据,有 0 ≤k ≤1,000,0≤n, m ≤k ,且n + m = k ,0 ≤a ,b ≤1,000,000。

noip2011提高组day2第1题

 

分析:

xjb推公式,然后就A了

多写几组(ax+by)^r的展开式,就能发现对于x^n*y^m这一项,r=m+n。

而且a、b的系数与x、y的系数是对应相等的。这样就解决了a、b的问题。

最后发现,在杨辉三角里,每一行的y的次数是从0开始递增的,所以我们预处理出杨辉三角第r行的数字,剩余的那个系数就是num[r][y+1]。

注意要不停地取膜!读入的时候以防万一也要取!

 

AC代码:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring>
 5 
 6 using namespace std;
 7 const int MOD = 10007;
 8 
 9 inline void read(int &x)
10 {
11     char ch = getchar(),c = ch;x = 0;
12     while(ch < 0 || ch > 9) c = ch,ch = getchar();
13     while(ch >= 0 && ch <= 9) x = (x<<1)+(x<<3)+ch-0,ch = getchar();
14     if(c == -) x = -x;
15 }
16 
17 int a,b,k,n,m,cnt,sum;
18 long long num[1005][1005];
19 long long ans;
20 
21 inline int min(int a,int b)
22 {
23     return a<b?a:b;
24 }
25 
26 long long ksm(int base,int n)
27 {
28     long long ans = 1;
29     for(;n;n>>=1)
30     {
31         if(n&1)
32             ans = ans*base%MOD;
33         base = base*base%MOD;
34     }
35     return ans;
36 }
37 
38 int main()
39 {
40     read(a),read(b),read(k),read(n),read(m);
41     a = a%MOD,b = b%MOD,n = n%MOD,m = m%MOD;
42     ans = (ksm(a,n)%MOD * ksm(b,m)%MOD)%MOD;
43     sum = m+n;
44     num[1][1] = 1,num[2][1] = 1,num[2][2] = 2,num[2][3] = 1;
45     for(int i = 2;i <= sum;++ i)
46     {
47         num[i+1][1] = 1;
48         for(int j = 2;j <= i+2;++ j)
49             if(num[i][j-1])
50                 num[i+1][j] = (num[i][j-1]+num[i][j])%MOD;
51     }
52     ans = ans*num[sum][m+1]%MOD;
53     printf("%lld\n",ans);
54     return 0;
55 }

 

洛谷 P1313 计算系数 题解

标签:span   line   return   c代码   through   多项式   展开   ble   www   

原文地址:http://www.cnblogs.com/shingen/p/7512310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!