poj 1942 Paths on a Grid

题目很简单,就是给你一个n*m的矩阵,让你求从左下角到右上角的所有路径,简单的组合数学,直接求C(n+m,m)=C(n+m,n)就可以了,只不过,在数据范围上有些需要注意的,如果直接用int型会数据溢出,所以用long long和double型的。

提交的时候,TLE了好几次,不知道哪地方错的,后来又把原代码提交了一遍,竟然A了,而且只用了16ms,不知道是不是poj后台有问题。

代码:

#include <stdio.h>

/*double f(double n,double m)
{
    int i,j,s;
    if(m>n-m)
    m=n-m;
    j=1;s=1;
    for(i=n-m+1;i<=n;i++)
    {
        s*=i;
        while(j<=m&&s%j==0)
        {
            s/=j;
            j++;
        }
    }
    return (double)s;
}*/

int main()
{
    double n,m,x,s;
    long long i;

    while(scanf("%lf%lf",&n,&m)!=EOF)
    {
        if(n==0.0&&m==0.0)
        break;
        s=1;
        if(n!=0&&m!=0)
        {
            x=n>m?n:m;
            for(i=x+1;i<=n+m;i++)
            {
                s=s*i/(i-x);
            }
        }
        printf("%.0lf\n",s);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/misty1/p/2461040.html