題解/算法 {1312. 序列统计}

LINK

Solution

数列长度是 [ 1 , N ] [1, N] [1,N], 所有数的范围是 [ L , R ] [L, R] [L,R];

1 首先令数列长度为 n n n, 即 [ a 1 , a 2 , . . . , a n ] [a1, a2, ..., an] [a1,a2,...,an];
2
. 1 等价修改数组–统一增加偏移量
. . 所有元素统一减去 L L L (令 S = R − L S = R-L S=RL), 即得到: 所有元素范围为 [ 0 , S ] [0, S] [0,S] (比如 [ R , R , R , R ] [R, R, R, R] [R,R,R,R] 对应为 [ S , S , S , S ] [S, S,S,S] [S,S,S,S]);
. 2 等价修改数组–转变为差分数组
. . 即首元素不变, 其他元素令 a i = a i − a i − 1 a_i = a_i - a_{i-1} ai=aiai1;

比如原数组是 [ a , b , c ] [a, b, c] [a,b,c] (满足每个元素 ∈ [ L , R ] \in [L, R] [L,R]), 令 S = R − L S = R-L S=RL;
1 先转换为 [ a − L , b − L , c − L ] [a-L, b-L, c-L] [aL,bL,cL] (满足每个元素 ∈ [ 0 , S ] \in [0, S] [0,S])
2 再转换为 [ a − L , ( b − L ) − ( a − L ) , ( c − L ) − ( b − L ) ] [a-L, (b-L)-(a-L), (c-L) - (b-L)] [aL,(bL)(aL),(cL)(bL)];
. . 这个最终的数组 比如是 [ a 1 , a 2 , . . . , a n ] [a1, a2, ..., an] [a1,a2,...,an] (注意, 这个数组并不一定是单调的), 它有个非常重要的性质: ∀ p r e ∈ [ 1 , n ] , ∑ i = 1 p r e a i ∈ [ 0 , S ] \displaystyle \forall pre \in [1, n], \sum_{i=1}^{pre} a_i \in [0, S] pre[1,n],i=1preai[0,S];
. . 理解这个式子, 非常非常重要, 这个式子 和 最终的这个数组, 是完全等价的 充分必要条件;

因此, 我们求有多少个不同的数组方案, 其实就只关注 那个数组式子即可;
由于 ∑ i = 1 n a i \sum_{i=1}^{n} a_i i=1nai这个数组总和 是 [ 0 , S ] [0, S] [0,S]范围的, 不是确定的 我们再将他细分, 假设整个数组和是 s s s, 他的方案数 就对应为隔板法 ( s s s个小球 放入 n n n个盒子里, 且每个盒子 ≥ 0 \geq 0 0个, 方案数为 C s + n − 1 n − 1 C_{s+n - 1}^{n-1} Cs+n1n1)

n/s012s
1C(0,0)C(1,0)C(2,0)C(S,0)
2C(1,1)C(2,1)C(3,1)C(S+1,1)
3C(2,2)C(3,2)C(4,2)C(S+2,2)
nC(n-1,n-1)C(n,n-1)C(n+1,n-1)C(n+S-1,n-1)

应用: CSDN-129110790:@Mark_[0,1], 这里有两种方式解决:
. 注意行是 [ 1 , 2 , . . . , n ] [1,2,...,n] [1,2,...,n], 而列是 [ 0 , 1 , 2 , . . . , S ] [0,1,2,...,S] [0,1,2,...,S];

1 以每一列为单位, 单独处理, 对于单个列 去除首行 其他行可以运用公式合为一项;
. 第0列: C ( 0 , 0 ) + ( C ( n , n − 1 ) − C ( 1 , 0 ) ) = C ( n , n − 1 ) C(0,0) + ( C(n,n-1) - C(1,0)) = C(n, n-1) C(0,0)+(C(n,n1)C(1,0))=C(n,n1);
. 第1列: C ( 1 , 0 ) + ( C ( n + 1 , n − 1 ) − C ( 2 , 0 ) ) = C ( n + 1 , n − 1 ) C(1,0) + ( C(n+1,n-1) - C(2,0)) = C(n+1, n-1) C(1,0)+(C(n+1,n1)C(2,0))=C(n+1,n1);
.
. 第S列: C ( S , 0 ) + ( C ( n + S , n ) − C ( S + 1 , 0 ) ) = C ( n + S , n − 1 ) C(S,0) + ( C(n+S,n) - C(S+1,0)) = C(n+S, n-1) C(S,0)+(C(n+S,n)C(S+1,0))=C(n+S,n1);
即, C ( n , n − 1 ) + C ( n + 1 , n − 1 ) + . . . + C ( n + S , n − 1 ) C(n, n-1) + C(n+1, n-1) + ... + C(n+S, n-1) C(n,n1)+C(n+1,n1)+...+C(n+S,n1), 再运用公式, 得到 C ( n + S + 1 , n ) − C ( n , n ) C(n+S+1, n) - C(n,n) C(n+S+1,n)C(n,n);

2 以每一行为单位, 单独处理, 对于单个行 去除首列 其他列可以运用公式合为一项;
. 第1行: C ( 0 , 0 ) + ( C ( S + 1 , 1 ) − C ( 1 , 1 ) ) = C ( S + 1 , 1 ) C(0,0) + ( C(S+1,1) - C(1,1)) = C(S+1, 1) C(0,0)+(C(S+1,1)C(1,1))=C(S+1,1);
. 第2行: C ( 1 , 1 ) + ( C ( S + 2 , 2 ) − C ( 2 , 2 ) ) = C ( S + 2 , 2 ) C(1,1) + ( C(S+2,2) - C(2,2)) = C(S+2, 2) C(1,1)+(C(S+2,2)C(2,2))=C(S+2,2);
.
. 第N行: C ( N − 1 , N − 1 ) + ( C ( S + N , N ) − C ( N , N ) ) = C ( S + N , N ) C(N-1,N-1) + ( C(S+N,N) - C(N,N)) = C(S+N, N) C(N1,N1)+(C(S+N,N)C(N,N))=C(S+N,N);
即, C ( S + 1 , 1 ) + C ( S + 2 , 2 ) + . . . + C ( S + N , N ) C(S+1, 1) + C(S+2, 2) + ... + C(S+N, N) C(S+1,1)+C(S+2,2)+...+C(S+N,N), 再运用公式, 得到 C ( S + N + 1 , N ) − C ( S + 1 , 0 ) C(S+N+1, N) - C(S+1,0) C(S+N+1,N)C(S+1,0);

因此, 答案为 C ( S + N + 1 , N ) − 1 C(S+N+1,N) - 1 C(S+N+1,N)1, 因为1e6 + 3是个质数, 因此可以使用Lucas来求组合数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值