歌名 - 歌手
0:00

    【NOIP2016提高A组模拟8.17】(雅礼联考day1)Matrix

    题目

    这里写图片描述

    分析

    假设,我们从\(F_{i,2}\)出发,那么对\(F_{n,n}\)的贡献就是\(某个系数乘以a^{n-i}b^{n-1}r_i\)
    同理,如果从\(F_{2,i}\)出发,那么对\(F_{n,n}\)的贡献就是\(某个系数乘以a^{n-1}b^{n-i}l_i\)
    那么某个系数是什么呢?
    感性理解一下,就是从出发点到(n,n)的方案数\(C_{2*n-i-2}^{n-i}\)
    那么答案就是$$\sum_{i-2}{n}C_{2*n-i-2}(a{n-1}bl_i+a{n-i}br_i)$$

    #include <cmath>
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    const long long maxlongint=2147483647;
    const long long mo=1000000007;
    const long long N=100005;
    using namespace std;
    long long l[N],r[N],a[N],b[N],jc[N*2],n,ny[N*2];
    long long mi(long long x,long long y)
    {
    	long long sum=1;
    	while(y)
    	{
    		if(y&1) sum=sum*x%mo;
    		x=x*x%mo;
    		y/=2;
    	}
    	return sum;
    }
    int main()
    {
    	scanf("%lld%lld%lld",&n,&a[1],&b[1]);
    	for(long long i=1;i<=n;i++) scanf("%lld",&l[i]);
    	for(long long i=1;i<=n;i++) scanf("%lld",&r[i]);
    	jc[0]=1;
    	for(long long i=1;i<=n*2;i++)
    	{
    		jc[i]=jc[i-1]*i%mo;
    	}
    	a[0]=b[0]=1;
    	for(long long i=2;i<=n;i++)
    	{
    		a[i]=a[i-1]*a[1]%mo;
    		b[i]=b[i-1]*b[1]%mo;
    	}
    	long long ans=0;
    	for(int i=2;i<=n;i++)
    	{
    		int sum=jc[2*n-i-2]*mi(jc[n-i],mo-2)%mo*mi(jc[n-2],mo-2)%mo;
    		sum=sum*(a[n-1]*b[n-i]%mo*l[i]%mo+a[n-i]*b[n-1]%mo*r[i]%mo)%mo;
    		ans=(ans+sum)%mo;
    	}
    	printf("%lld\n",ans);
    }
    
    
    posted @ 2018-05-16 12:12  无尽的蓝黄  阅读(101)  评论(0编辑  收藏  举报