题目描述
𝑥x 的 𝑘k 次下降幂定义为
𝑥(𝑘)=(𝑥)(𝑥−1)(𝑥−2)⋯(𝑥−𝑘+1)x(k)=(x)(x−1)(x−2)⋯(x−k+1)
𝑥x 的下降幂多项式是由 𝑥x 的一组下降幂及系数组成的算式:
𝑓(𝑥)=𝑎𝑛𝑥(𝑛)+𝑎𝑛−1𝑥(𝑛−1)+⋯+𝑎2𝑥(2)+𝑎1𝑥(1)+𝑎0f(x)=anx(n)+an−1x(n−1)+⋯+a2x(2)+a1x(1)+a0
给定下降幂多项式 𝑓(𝑥)f(x) 的系数 𝑎𝑛,𝑎𝑛−1,⋯ ,𝑎0an,an−1,⋯,a0 与一个值 𝑚m,请计算 𝑓(𝑚) mod 1,000,000,007f(m)mod1,000,000,007。
输入格式
- 第一行:两个整数 𝑛n 与 𝑚m
- 第二行:𝑛+1n+1 个整数 𝑎𝑛,𝑎𝑛−1,⋯ ,𝑎1,𝑎0an,an−1,⋯,a1,a0
输出格式
- 单个整数:表示 𝑓(𝑚) mod 1,000,000,007f(m)mod1,000,000,007。
数据范围
- 30%30% 的数据,1≤𝑛≤101≤n≤10
- 60%60% 的数据,1≤𝑛≤5,0001≤n≤5,000
- 100%100% 的数据,1≤𝑛≤300,0001≤n≤300,000
- −109≤𝑚≤109−109≤m≤109
- −109≤𝑎𝑖≤109−109≤ai≤109
样例数据
输入:
3 5
4 3 2 1
输出:
311
说明:
f(x) = 4(x)(x-1)(x-2)+3(x)(x-1)+2(x)+1
f(5) = 4(5)(4)(3)+3(5)(4)+2(5)+1=240+60+10+1
详见代码:
#include<bits/stdc++.h>
using namespace std;
int a[300005];
long long ans=0;
int main()
{int n,m;cin>>n>>m;for (int i=n;i>=0;i--){cin>>a[i];}long long cf=1;for (int i=0;i<=n;i++){ans+=cf*a[i];cf*=(m-i);ans%=1000000007;cf%=1000000007;}cout<<(ans+1000000007)%1000000007;return 0;
}