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

    Description
    给定一个多项式 (ax + by)^k ,请求出多项式展开后 xnym 项的系数。

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

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

    Sample Input
    1 1 3 1 2

    Sample Output
    3

    Data Constraint
    对于 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。

    .
    .
    .
    .
    .
    程序:
    //50分

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int a,b,k,n,m,s[1001][501];
    
    int main()
    {
    	scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
    	if (k==0) 
    	{
    		cout<<1;
    		return 0;
    	}
    	if (k==1)
    	{
    		if (n==0&&m==1) cout<<b;
    		if (n==1&&m==0) cout<<a;
    		return 0;
    	}
    	if (a!=1||b!=1) 
    	{
    		cout<<10006;
    		return 0;
    	}
    	memset(s,0,sizeof(s));
    	s[0][1]=1;
    	s[1][1]=1;
    	for (int i=2;i<=k;i++)
    	{
    		s[i][1]=1;
    		for (int j=2;j<=i/2+1;j++)
    		{
    			if (j==i/2+1&&i%2==0) 
    			{
    				s[i][j]=(s[i-1][j-1]*2)%10007;
    				break;
    			}
    			s[i][j]=(s[i-1][j-1]+s[i-1][j])%10007;
    		}
    	}
    	if (n==k||m==k)
    	{
    		cout<<1;
    		return 0;
    	}
    	int w=min(n,m);
    	printf("%d",s[k][w+1]%10007);
    	return 0;
    }
    
  • 相关阅读:
    C#遍历List并删除某个或者几个元素的方法
    7月清北学堂培训 Day 4
    7月清北学堂培训 Day 3
    7月清北学堂培训 Day 2
    7月清北学堂培训 Day 1
    P1383 高级打字机
    P2401 不等数列
    P1412 经营与开发
    P1314 聪明的质监员
    2019.7.9 校内测试 T3 15数码问题
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/10292784.html
Copyright © 2011-2022 走看看