noip提高组模拟Matrix
2016-08-17 20:37
225 查看
Description
Data Constraint
题目分析
我们观察第一行的一个点对答案f
的贡献,设这个点的纵坐标为i,权值为L[i],显然是等于x*an−1*bn−i*L[i],其中x是个十分奇怪的系数,我们列出n=1—4的情况进行分析(下面只分析第一行对答案的影响,第一列类似)
N=1 F[1][1]=L[1]
N=2 F[2][2]=a*L[2]
N=3 F[3][3]=a2L[3]+2a2*b*L[2]
N=4 F[4][4]=a3L[4]+3a3b*L[3]+6a3*b2*L[2]
经分析x,我们发现了x的值的规律,即设第i项的x等于Ci−1n+i−2,接下来就简单了,我们预处理一下每个数的阶乘,然后求一下逆元,这道题就可以O(N)解决。
代码
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll maxn=200005,maxn1=1000000007; int n,i,j,k; ll l[maxn],t[maxn],ans,a,b,c[maxn],g[maxn]; ll mi(ll x,int y){ if (!y) return 1; if (y==1) return x; ll t=mi(x,y/2); if (y%2) return t*t%maxn1*x%maxn1;return t*t%maxn1; } int main(){ // freopen("data.in","r",stdin); scanf("%d%lld%lld",&n,&a,&b); for (i=1;i<=n;i++) scanf("%lld",&l[i]); for (i=1;i<=n;i++) scanf("%lld",&t[i]); g[0]=1; for (i=1;i<=2*n;i++) g[i]=g[i-1]*i%maxn1; c[1]=1;n--; for (i=2;i<=n;i++) c[i]=g[n+i-2]*mi(g[i-1],maxn1-2)%maxn1*mi(g[n-1],maxn1-2)%maxn1; n++; for (i=2;i<=n;i++){ ans=(ans+mi(b,n-1)*mi(a,n-i)%maxn1*c[n-i+1]%maxn1*t[i]%maxn1)%maxn1; ans=(ans+mi(b,n-i)*mi(a,n-1)%maxn1*c[n-i+1]%maxn1*l[i]%maxn1)%maxn1; } printf("%lld\n",ans); }
相关文章推荐
- HDU 5834 Magic boy Bi Luo with his excited tree(树形dp)
- IO流——任意访问文件流
- udp一对一通信
- 最优间隔分类器.原始/对偶优化问题.KKT.SVM对偶
- SSH梳理
- String.join()方法的使用
- Android 实时加载网络新闻
- iOS基础GIF图片的实现
- CF 219D Choosing Capital for Treeland (树形dp)
- 给定产生1-5的随机数,求1-7的随机数函数
- Fastest way to check if a file exist using standard C++
- JZOJ.4709【NOIP2016提高A组模拟8.17】Matrix
- JDK环境安装教程
- [转] 从数据库中读取图片并导入Excel文件,C#方式
- 静态方法中调用非静态方法
- 站在巨著之上谈泛型(转载)
- WebViewJavascriptBridge 原理分析
- Tomcat在CentOS6.7上的安装配置及使用
- 常用的专业搜索工具(分类)
- 【USACO题库】5.2.1 Snail Trails蜗牛的旅行