• NOIP2011 计算系数


    1计算系数

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

    【输入】

    输入文件名为 factor.in。

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

    【输出】

    输出文件名为 factor.out。

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

    【输入输出样例】

    factor.in

    factor.out

    1 1 3 1 2

    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。

    【思路】

      本题考查计算组合公式。可以知道答案就是C[k][m]*a^n*b^m。

      有两种递归方式:

       一种计算第n行,C[i]=C[i-1]*(k-i+1)/i  但实践得知这种递推的方式不能用模运算。

       一种计算是把表全部递推出来 C[k][i]=C[k-1][i]+C[k-1][i-1];这种方法可以用模且时间足够。

    【代码】

     1 #include<iostream>
     2 using namespace std;
     3 const int MOD= 10007;
     4 long long C[1001][1001];
     5 int a,b,k,n,m;
     6 int main() {
     7     cin>>a>>b>>k>>n>>m;
     8     for(int i=1;i<=k;i++) {
     9         C[i][0]=1;C[i][i]=1;
    10         for(int j=1;j<=i-1;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;
    11     }
    12     long long res=1;
    13     for(int i=1;i<=n;i++) res=(res*a)%MOD;  //a^n
    14     for(int i=1;i<=m;i++) res=(res*b)%MOD;  //b^m
    15     res=(res*C[k][m])%MOD;
    16     cout<<res;
    17     return 0;
    18 }

     

  • 相关阅读:
    iOS开发拓展篇—音频处理(音乐播放器5)
    在Unity中接入Xbox360手柄
    POJ 2531 Network Saboteur(DFS)
    小塔1024实现
    Cocos2dx--开发环境搭建
    2.7 视图合并
    Cocos2d-X开发中国象棋《四》设计游戏场景
    libsqlite3.dylib与libsqlite3.0.dylib的差别
    AsyncTask
    开发,从需求出发 &#183; 之二 造飞机的工厂
  • 原文地址:https://www.cnblogs.com/lidaxin/p/4859342.html
Copyright © 2020-2023  润新知