zoukankan      html  css  js  c++  java
  • NOIP 2011 计算系数

    题目描述

    求 (ax+by)^k 的展开中 x^n*y^m 项的系数。由于系数可能很大,只要求输出除以 10007 的余数。

    输入

    一行共五个整数,分别为 a,b,k,n,m

    输出

    一个整数,为该项系数除以10007的余数。

    样例输入

    1 1 3 1 2

    样例输出

    3

    数据范围:


    30% 0<=k<=10,


    50% a=1,b=1


    100% 0<=k<=1000, 0<=n,m<=k 且 n+m=k, 0<=a,b<=100,000


    //NOIP2011 DAY2 factor

    Solution:

      首先先不考虑a,b的变化,即假设a=b=1。

      然后开始分析题意,(ax+by)^k的展开,在数学上是一个杨辉三角~

    //下面是数学问题惹

       (假定a=b=1) 我们就k=0,1,2,3...进行分析

        1                x^0*y^0

        1 1           x^1+y^1

        1 2 1          x^2+2xy+y^2

        1 3 3 1       x^3+3x^2y+3xy^2+*y^2

        ......            ......

      以此类推,本题只是增加了a,b的数值。

      在杨辉三角中找出ans=f[k][m]后,再把ans^a后再ans^b即可。

      记得取模(不用写快速幂也是很良心der~)

     1 #include<cstdio>
     2 #define MAXN 1005
     3 #define MODE 10007
     4 using namespace std;
     5 int f[MAXN][MAXN];
     6 int a,b,k,n,m,ans=1;
     7 int main(){
     8     scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
     9     a%=MODE;b%=MODE;
    10     for(int i=1;i<=k;i++) {
    11         f[i][i]=f[i][0]=1;
    12         f[i][1]=i;
    13     }
    14     for(int i=3;i<=k;i++)
    15         for(int j=2;j<=i;j++) f[i][j]=(f[i-1][j-1]+f[i-1][j])%MODE;
    16     ans=f[k][m]%MODE;
    17     for(int i=1;i<=n;i++) ans=(ans*a)%MODE;
    18     for(int i=1;i<=m;i++) ans=(ans*b)%MODE;
    19     printf("%d",ans);
    20     return 0;
    21 }
  • 相关阅读:
    微信小程序之相对位置
    SQL中 in 、not in 、exists、not exists 用法和差别
    指令打印程序(通过Socket)
    javaee正则表达式基础和常用表达式
    分析JSON/XML
    Hello2 source analisis(代码分析)
    Analysis Of HTTP
    Servlet Filter详细讲
    Analysis of Web.xml in Hello1 project
    Java annotation (注解)
  • 原文地址:https://www.cnblogs.com/drizzly/p/7552318.html
Copyright © 2011-2022 走看看