zoukankan      html  css  js  c++  java
  • 【CSP模拟赛】方程(数学)

    题目描述

      求关于x的方程:x1+x2+……xk=n的非负整数解的个数。

    输入格式

      仅一行,包含两个正整数n,k。

    输出格式

      一个整数,表示方程不同解的个数,这个数可能很大,你只需输出mod 20080814 的结果。

    输入样例

      1 1

    输出样例

      1
      提示
      数据范围
      对于50%的数据,n,k<=300
      对于80%的数据,n,k<=1000
      对于100%的数据,n,k<=100000

    分析

      第一眼看这不是结论题吗?直接就是C(n+k-1,n-1)。

      然后一看模数是个偶数,瞬间懵逼

      最后直接赌命暴力分解质因数,居然过了。。。。。。

      仔细算复杂度应该是n根号n的

      代码

    #include<cstdio>
    const int mod=20080814;
    int n,k,mp[200005];
    int qp(int a,int k)
    {
        int res=1;
        while(k)
        {
            if(k&1)res=1ll*res*a%mod;
            a=1ll*a*a%mod;k/=2;
        }
        return res;
    }
    int C(int a,int b)
    {
        int ans=1;
        for(int i=a,x;i>=a-b+1;i--)
        {
            x=i;
            for(int j=2;j*j<=x;j++)
            while(x%j==0)x/=j,mp[j]++;
            mp[x]++;
        }
        for(int i=2,x;i<=b;i++)
        {
            x=i;
            for(int j=2;j*j<=x;j++)
            while(x%j==0)x/=j,mp[j]--;
            mp[x]--;
        }
        for(int i=2;i<=200000;i++)ans=1ll*ans*qp(i,mp[i])%mod;
        return ans;
    }
    int main()
    {
        scanf("%d%d",&n,&k);
        printf("%d
    ",C(n+k-1,n-1));
    }
  • 相关阅读:
    85. Maximal Rectangle
    120. Triangle
    72. Edit Distance
    39. Combination Sum
    44. Wildcard Matching
    138. Copy List with Random Pointer
    91. Decode Ways
    142. Linked List Cycle II
    异或的性质及应用
    64. Minimum Path Sum
  • 原文地址:https://www.cnblogs.com/firecrazy/p/11654292.html
Copyright © 2011-2022 走看看