NC21194. tokitsukaze and Unlimited Array
描述
输入描述
第一行是两个整数n(0≤n≤10^9)表示多项式函数F(x)的最高次数。m(1≤m≤100)表示多项式函数的项数。
接下来一行共2*m个非负整数,这2*m个非负整数分为m组,每组两个非负整数。
对于每一组:第一个整数x(1≤x≤10^9)表示该项的系数,第二个整数y(0≤y≤n)代表该项的次数。
输入数据保证F(x)的最高次项系数不为0且次数为n,保证次数唯一,不保证输入多项式的幂次是递减的。
例如当n=3,m=3时,则输入6个非负整数,如:4 3 2 2 5 0,表示多项式函数F(x)=4x^3+2x^2+5。
输出描述
对于每一组案例,输出一行一个非负整数,表示级数和mod 1000000007后的结果。
示例1
输入:
3 3 4 3 2 2 5 0
输出:
24
说明:
F(x)=4x^3+2x^2+5C++14(g++5.4) 解法, 执行用时: 838ms, 内存消耗: 504K, 提交时间: 2018-12-07 23:30:02
#include<bits/stdc++.h> int mod=1e9+7; int f[]={1,927880474,933245637,668123525,429277690,733333339,724464507,957939114,203191898,586445753,698611116}; int main() { int n,m,a,b,k; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d",&a,&b); if(b==n) k=a; } int ans=f[n/100000000]; for(int i=n-n%100000000+1;i<=n;i++) ans=1LL*ans*i%mod; printf("%lld\n",1LL*ans*k%mod); }
C++11(clang++ 3.9) 解法, 执行用时: 858ms, 内存消耗: 488K, 提交时间: 2020-03-15 18:01:03
#include<bits/stdc++.h> int mod=1e9+7; int f[]={1,927880474,933245637,668123525,429277690,733333339,724464507,957939114,203191898,586445753,698611116}; int main() { int n,m,a,b,k; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d",&a,&b); if(b==n) k=a; } int ans=f[n/100000000]; for(int i=n-n%100000000+1;i<=n;i++) ans=1LL*ans*i%mod; printf("%lld\n",1LL*ans*k%mod); }