CERC2015 Frightful Formula 神奇的模意义下分数

上网查了下这道题的正解是FFT......然而机智的xushu用待定系数法A了。。。。

f[i,j]+k=a(f[i][j-1]+k)+b(f[i-1,j]+k) 解得 k=c/(a+b-1)

于是令g[i][j]=f[i][j]+k,g[i][j]=a*g[i][j-1]+b*g[i-1][j],

之后再计算g[i][1] 和 g[1][j]对 g[n][n]的贡献,就是从g[i][1]走到g[i][2]后,再走到g[n][n]有多少条路径,直接组合数,然后向右走是乘上一个a,向下走是乘上一个b,就可以很快计算出g[n][n]了,最后f[n][n]=g[n][n]-k。哇,好机智啊。

今天问了一下xushu,关于那个模意义下的分数,是真的可以表示出来的

就是a%mod不等于(a+2/7)%mod,很神奇,以后有时间要研究一下数论。

#include<cstdio>
#include<cstring>
#define maxl 200010
#define mod 1000003

long long n,A,B,C,ans;
long long fi[maxl],fj[maxl];
long long powa[maxl],powb[maxl],c[maxl];

void prework()
{
	scanf("%lld",&n);
	scanf("%lld%lld%lld",&A,&B,&C);
	for(long long i=1;i<=n;i++)
		scanf("%lld",&fi[i]);
	for(long long i=1;i<=n;i++)
		scanf("%lld",&fj[i]);
	powa[0]=1;powb[0]=1;
	for(long long i=1;i<=n;i++)
		powa[i]=(powa[i-1]*A)%mod,
		powb[i]=(powb[i-1]*B)%mod;
}

long long qp(long long a,long long b)
{
	long long ans=1,cnt=a;
	while(b)
	{
		if(b&1)
			ans=(ans*cnt)%mod;
		cnt=(cnt*cnt)%mod;
		b>>=1;
	}
	return ans;
}

void mainwork()
{
	if(A==0 && B==0) {ans=C;return;}
	if(A==1 && B==0)
	{
		ans=fi[n];
		for(long long i=2;i<=n;i++)
			ans=(ans*A+C)%mod;
		return;
	}
	if(A==0 && B==1)
	{
		ans=fj[n];
		for(long long j=2;j<=n;j++)
			ans=(ans*B+C)%mod;
		return;
	}
	c[n]=1;long long zi=1,mu=1,d=1,d1,d2;
	for(long long i=n-1;i>=2;i--)
	{
		zi=(zi*(n+d-2))%mod;mu=(mu*d)%mod;
		c[i]=(zi*qp(mu,mod-2))%mod;d++;
	}
	for(long long i=2;i<=n;i++)
	{
		d1=((c[i]*powa[n-1])%mod*powb[n-i])%mod;
		d2=((c[i]*powb[n-1])%mod*powa[n-i])%mod; 
		ans=(ans+d1*fi[i]+d2*fj[i])%mod;
		ans=(ans+(((d1+d2)*C)%mod*qp(A+B-1,mod-2))%mod)%mod;
	}
	ans=(ans-(C*qp(A+B-1,mod-2))%mod)%mod;
	ans=(ans+mod)%mod;
}

void print()
{
	printf("%lld",ans);
}

int main()
{
	prework();
	mainwork();
	print();
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值