Frightful Formula Gym - 101480F (待定系数法)
Problem F: Frightful Formula
\]
题意
题意就是存在一个\(n*n\)的矩阵\(f[n][n]\)。然后给出\(n,a,b,c\),在给出两个序列\(l[n],t[n]\)。
定义矩阵如下:
f[i][1] &= l[i] \\
f[1][i] &= t[i] \\
f[i][j] &= a*f[i][j-1] + b*f[i-1][j] + c
\end{aligned}
\]
求出\(f[n][n]\%mod\)的值。
思路
题目要求\(f[n][n]\),如果我们会求\(f[n][m]\),那么\(f[n][n]\)自然也会了,下面我给出推导过程。
- 首先考虑\(a=1, b=1, c=0\)的情况
\]
显然,\(f[n][m]\)可以看成从\((1,1)\)走到\((n,m)\),每一步只能向下或者向右的方案数。也就是一共要走\(n+m-2\)步,其中\(n-1\)往下走,答案就是\(C_{n+m-1}^{n-1}\)或者\(C_{n+m-1}^{m-1}\)。
2. 接下来考虑\(a \not= 1,b \not= 1,c=0\)的情况。
\]
这时候每一步向右走贡献一个\(a\),向下走贡献一个\(b\)。
- 我们先考虑第一行每个点对终点的贡献,例如\(f[1][i]\),他到终点一共需要向右走\(m-i\)次,向下走\(n-1\)次,所以一个方案贡献了\(f[1][i]*a^{m-i}b^{n-1}\)。那么如何计算方案数呢?为了避免重复计算,需要先向下走一步然后从(2,i)到(n,m),一共的方案数就是\(C_{n+m-i-2}^{n-2}\)。所以对于第一行总贡献就是\(\sum_2^m f[1][i]*C_{n+m-i-2}^{n-2}*a^{m-i}b^{n-1}\)。
- 对于列来说,同样的道理,一个方案贡献了\(f[i][1]*a^{m-1}b^{n-i}\),然后先向右走一步防止重复计算,方案数为\(C_{n+m-i-2}^{m-2}\)。所以第一列的总贡献就是\(\sum_2^nC_{n+m-i-2}^{m-2}*a^{m-1}b^{n-i}\)。
 所以只要\(O(N)\)遍历第一行,第一列,就能算出\(f[n][m]\)。
- 多说一句,这样做是因为第一行、第一列的数和\(f[1][1]\)没有关系,如果直接给出\(f[1][1]\),然后求\(f[n][m]\)那么直接就可以算出答案\(f[1][1]*C_{n+m-2}^{n-1}*a^{m-1}b^{n-1}\)
- 最后考虑\(a \not= 1,b \not= 1,c\not=0\)的情况。
\]
如果没有\(c\),好做,但是有\(c\)怎么办呢?有没有办法把\(c\)去掉?
答案是有的。
我们令\(g[i][j] = f[i][j] + k\),如果存在一个\(k\)满足
\]
那么问题就转化到了2问题去了。
其实\(k\)也很好求,直接带入把\(g[i][j]\)拿\(f[i][j]+k\)代入。
f[i][j]+k &= a*(f[i][j-1]+k) + b*(f[i-1][j]+k)\\
&= a*f[i][j-1] + b*f[i-1][j] + c
\end{aligned}
\]
容易得到\(k = \frac{c}{a+b-1} = c*inv(a+b-1)\),所以做的时候把\(f[1][i]、f[i][1]\)转化成\(g[1][i]、g[i][1]\)求出\(g[n][m]\),最后在换回\(f[n][m]\)就可以了。
/***************************************************************
    > File Name    : F.cpp
    > Author       : Jiaaaaaaaqi
    > Created Time : 2019年05月06日 星期一 14时35分10秒
 ***************************************************************/
#include <map>
#include <set>
#include <list>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#include <cfloat>
#include <string>
#include <vector>
#include <cstdio>
#include <bitset>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define  lowbit(x)  x & (-x)
#define  mes(a, b)  memset(a, b, sizeof a)
#define  fi         first
#define  se         second
#define  pii        pair<int, int>
typedef unsigned long long int ull;
typedef long long int ll;
const int    maxn = 2e5 + 10;
const int    maxm = 4e5 + 10;
const ll     mod  = 1e6 + 3;
const ll     INF  = 1e18 + 100;
const int    inf  = 0x3f3f3f3f;
const double pi   = acos(-1.0);
const double eps  = 1e-8;
using namespace std;
ll n, m, a, b, c;
int cas, tol, T;
ll fac[maxm], inv[maxm];
ll l[maxn], t[maxn];
ll fpow(ll a, ll b) {
	ll ans = 1;
	while(b) {
		if(b&1)	ans = ans*a%mod;
		a = a*a%mod;
		b >>= 1;
	}
	return ans;
}
void handle() {
	fac[0] = inv[0] = 1;
	int mx = 2*n;
	for(int i=1; i<=mx; i++) {
		fac[i] = fac[i-1]*i%mod;
	}
	inv[mx] = fpow(fac[mx], mod-2);
	for(int i=mx-1; i>=1; i--) {
		inv[i] = inv[i+1]*(i+1)%mod;
	}
}
ll C(int n, int m) {
	return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int main() {
	scanf("%lld%lld%lld%lld", &n, &a, &b, &c);
	ll k = c*fpow(a+b-1, mod-2)%mod;
	handle();
	for(int i=1; i<=n; i++) {
		scanf("%lld", &l[i]);
		l[i] = (l[i]+k)%mod;
	}
	for(int i=1; i<=n; i++) {
		scanf("%lld", &t[i]);
		t[i] = (t[i]+k)%mod;
	}
	ll ans = 0ll;
	for(int i=2; i<=n; i++) {
		ans += l[i] * fpow(b, n-i)%mod * fpow(a, n-1)%mod * C(2*n-i-2, n-2)%mod;
		ans %= mod;
	}
	for(int i=2; i<=n; i++) {
		ans += t[i] * fpow(b, n-1)%mod * fpow(a, n-i)%mod * C(2*n-i-2, n-2)%mod;
		ans %= mod;
	}
	ans = ((ans-k)%mod+mod)%mod;
	printf("%lld\n", ans);
	return 0;
}
Frightful Formula Gym - 101480F (待定系数法)的更多相关文章
- bzoj 4451 : [Cerc2015]Frightful Formula  FFT
		4451: [Cerc2015]Frightful Formula Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 177 Solved: 57[Sub ... 
- LG4351 [CERC2015]Frightful Formula
		Frightful Formula 给你一个\(n\times n\)矩阵的第一行和第一列,其余的数通过如下公式推出: \[f_{i,j}=a\cdot f_{i,j-1}+b\cdot f_{i-1 ... 
- Gym 101480F Frightful Formula(待定系数)题解
		#include<cmath> #include<set> #include<map> #include<queue> #include<cstd ... 
- Ceizenpok’s formula Gym - 100633J  扩展Lucas定理 + 中国剩余定理
		http://codeforces.com/gym/100633/problem/J 其实这个解法不难学的,不需要太多的数学.但是证明的话,我可能给不了严格的证明.可以看看这篇文章 http://ww ... 
- F - Fraction Formula Gym - 102307F
		Mr. Potato Head has been promoted and now is a math professor at the UNAL. For his first course he i ... 
- BZOJ4451 : [Cerc2015]Frightful Formula
		$(i,1)$对答案的贡献为$l_iC(2n-i-2,n-i)a^{n-1}b^{n-i}$. $(1,i)$对答案的贡献为$t_iC(2n-i-2,n-i)*a^{n-i}b^{n-1}$. $(i ... 
- BZOJ4451 [Cerc2015]Frightful Formula 多项式 FFT 递推 组合数学
		原文链接http://www.cnblogs.com/zhouzhendong/p/8820963.html 题目传送门 - BZOJ4451 题意 给你一个$n\times n$矩阵的第一行和第一列 ... 
- P4351-[CERC2015]Frightful Formula【组合数学,MTT】
		正题 题目链接:https://www.luogu.com.cn/problem/P4351 题目大意 \(n*n\)的矩形,给出第一行和第一列的数,剩下的满足\(F_{i,j}=a*F_{i,j-1 ... 
- Gym - 101480 CERC 15:部分题目题解(队内第N次训练)
		-------------------题目难度较难,但挺有营养的.慢慢补. A .ASCII Addition pro:用一定的形式表示1到9,让你计算加法. sol:模拟. solved by fz ... 
随机推荐
- spring boot Websocket
			本文只作为个人笔记,大部分代码是引用其他人的文章的. 参考: https://blog.csdn.net/moshowgame/article/details/80275084 在springboot ... 
- SQL系列(九)—— 子查询(subQuery)
			1.子查询 前面的系列介绍的都是简单的查询场景,其中都只涉及到单张表的数据检索.但是在日常是实际应用中,数据模型之间的关系都非常的复杂,数据的需求一般都是来源于多个数据模型之间的组合而成,即对应多张表 ... 
- PriorityQueue详解
			美人如斯!好好看文章! 前言 java中关于Queue队列的实现繁多(关于Queue可以移步至我的另一篇文章:<Queue介绍>),每种实现根据自身的特性都有相应的应用场景.这里我们就来聊 ... 
- Python变量问题:命名、类型、赋值
			1.变量问题 1.1变量命名: (1)变量名只能包含字母.数字和下划线.变量名可以字母或下划线开头,但不能以数字开头.例如,name1_,_name1都是合法的,但1name就不行(2)变量名中间不能 ... 
- Tomcat 类加载器的实现
			Tomcat 内部定义了多个 ClassLoader,以便应用和容器访问不同存储库中的类和资源,同时达到应用间类隔离的目的.本文首发于公众号:顿悟源码. 1. Java 类加载机制 类加载就是把编译生 ... 
- Kafka MirrorMaker 跨集群同步工具
			一.MirrorMaker介绍 MirrorMaker是Kafka附带的一个用于在Kafka集群之间制作镜像数据的工具.该工具从源集群中消费并生产到目标群集.这种镜像的常见用例是在另一个数据中心提供副 ... 
- MVC+Ninject+三层架构+代码生成 -- 总结(一、數據庫)
			一.數據表 是參照 別人的庫建表的 ,主鍵都是用int 自增,若是跨數據庫的話,建議使用GUID為主鍵. 
- axios捕获401 赋值token
			//捕获401 // http request 拦截器 axios.interceptors.request.use( config => { const token = localStorag ... 
- Angular复习笔记7-路由(上)
			Angular复习笔记7-路由(上) 关于Angular路由的部分将分为上下两篇来介绍.这是第一篇. 概述 路由所要解决的核心问题是通过建立URL和页面的对应关系,使得不同的页面可以用不同的URL来表 ... 
- Space Syntax(空间句法)
			01 December 2019 13:16 https://spacesyntax.com/ 相关软件:Depthmap 空间句法理论作为一种新的描述建筑和城市空间模式的语言 ... 
