微积分基础知识

来源:互联网 发布:网络招生哪家强 编辑:程序博客网 时间:2024/04/30 11:41

       微积分基础知识

       

        前言:在信息学算法竞赛中,常有些数学类问题需用到微积分,或用到微积分的算法(如母函数,HNOI2012排队),这里本人总结了一下竞赛中常用的微积分基础知识,供大家参考,有写得不好的地方请多多包涵,感谢学长帮助修改审校,若有错误请留言告诉我,谢谢!

        辅助参考:    http://blog.csdn.net/u011400953/article/details/9325389   <普通物理中的数学基础>

                             http://blog.csdn.net/u011400953/article/details/9328067   <母函数的运用>

 

       声明:该文章为纯手打(MathType工具辅助编辑公式),由于是新手,不便讲这些公式传上来,因此用在word下的截图,图片中有部分其他符号(如:回车号),请见谅。转载注明出处〈http://blog.csdn.net/u011400953

          

————————————————————————————————————————————

       

           

                  

                  

                 

               

————————————————————————————————————————————

附:HNOI2012排队

方法:

     

代码:

#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>using namespace std;#define MaxL 2000const long long MOD=1000000000;struct Bignum{    int len;    long long a[MaxL];    void init()    {        }    Bignum()    {        len=0;        memset(a,0,sizeof(a));        }};int n,m;Bignum ans1,ans2;void operator *= (Bignum &p,int x){    int tmp=0;    for (int i=1;i<=p.len;++i)    {        p.a[i]=p.a[i]*x+tmp;        tmp=p.a[i]/MOD;        p.a[i]%=MOD;        }    if (tmp)    p.a[++p.len]=tmp;}Bignum operator + (Bignum x,Bignum y){    int len=max(x.len,y.len);    int tmp=0;    for (int i=1;i<=len;++i)    {        x.a[i]=x.a[i]+y.a[i]+tmp;        tmp=x.a[i]/MOD;        x.a[i]%=MOD;        }    x.len=len;    if (tmp)        x.a[++x.len]=tmp;    return x;}Bignum operator * (Bignum x,Bignum y){    Bignum p;    p.len=0;    for (int i=1;i<MaxL;++i)        p.a[i]=0;    for (int i=1;i<=x.len;++i)    {        int tmp=0;        for (int j=1;j<=y.len;++j)        {            p.a[i+j-1]=p.a[i+j-1]+x.a[i]*y.a[j]+tmp;            tmp=p.a[i+j-1]/MOD;            p.a[i+j-1]%=MOD;                }        if (tmp)        p.a[i+y.len]+=tmp;    }    int tmp=0;    for (int i=1;i<MaxL;++i)    {        p.a[i]=p.a[i]+tmp;        tmp=p.a[i]/MOD;        p.a[i]%=MOD;        }    for (int i=MaxL-1;i>=1;--i)    if (p.a[i])    {        p.len=i;        break;        }    if (!p.len) p.len=1;    return p;}void write(Bignum p){    printf("%lld",p.a[p.len]);    for (int i=p.len-1;i>=1;--i)    printf("%09lld",p.a[i]);    printf("\n");}Bignum A(int n,int m){    Bignum p;    p.len=1;    p.a[1]=1;    for (int i=0;i<m;++i)        p*=(n-i);    return p;}int main(){    scanf("%d%d",&n,&m);    if (n>=1 && n+3>=m)    {        ans1=A(n+3,m);        ans1*=((n+1)*n);        }    if (m>=1 && n+3>=m)    {        ans2=A(n+2,m-1);        ans2*=(2*(n+1)*m);        }    write(A(n,n)*(ans1+ans2));    return 0;}

<自己写的太烂,代码参考了http://www.cnblogs.com/evan-oi/archive/2012/05/04/2482835.html>

 

 

原创粉丝点击