51nod 1838

http://www.51nod.com/Challenge/Problem.html#!#problemId=1838

题目中有一个很巧妙的反演。由于之前没接触过这类题目。第一次接触,感觉学到了很多东西。

首先。计算,无限限制的情况下,从(0,0)(0,0)(0,0)走到(x,y)(x,y)(x,y),不走(0,0)(0,0)(0,0)向量的方案数。

由于xxx方向和yyy方向有一定关系,又相互独立。
令A(M,R,t)A(M,R,t)A(M,R,t)表示:
∑iRai=t,ai∈[0,M]\sum_i^Ra_i = t,a_i\in[0,M]i∑R​ai​=t,ai​∈[0,M]
的答案个数。
则有:
∑i>=0A(M,R,t)xt=(∑i=0Mxi)R\sum_{i>=0}A(M,R,t)x^t=\Big(\sum_{i=0}^Mx^i\Big)^Ri>=0∑​A(M,R,t)xt=(i=0∑M​xi)R
(∑i=0Mxi)R=(1−xM+11−x)R=(1−x)−R∑a=0R(Ra)(−1)ax(M+1)a\Big(\sum_{i=0}^Mx^i\Big)^R =\Big(\frac{1-x^{M+1}}{1-x}\Big)^R=(1-x)^{-R}\sum_{a=0}^R\binom{R}{a}(-1)^ax^{(M+1)a}(i=0∑M​xi)R=(1−x1−xM+1​)R=(1−x)−Ra=0∑R​(aR​)(−1)ax(M+1)a
=∑a=0R(Ra)(−1)ax(M+1)a∑b>=0(R+b−1b)xb=\sum_{a=0}^R\binom{R}{a}(-1)^ax^{(M+1)a}\sum_{b>=0}\binom{R+b-1}{b}x^b=a=0∑R​(aR​)(−1)ax(M+1)ab>=0∑​(bR+b−1​)xb
则有:A(M,R,x)=∑a=0R(Ra)(−1)a(R+(x−(M+1)a)−1x−(M+1)a)A(M,R,x) =\sum_{a=0}^R\binom{R}{a}(-1)^a\binom{R+(x-(M+1)a)-1}{x-(M+1)a} A(M,R,x)=a=0∑R​(aR​)(−1)a(x−(M+1)aR+(x−(M+1)a)−1​)

令Dd(R,x,y)D_d(R,x,y)Dd​(R,x,y)为(0,0)(0,0)(0,0)到(x,y)(x,y)(x,y)走RRR步, ddd个(0,0)(0,0)(0,0)向量的方案数.
那么有:
∑t=0R∑d=0t(td)Dt(R,x,y)=∑d=0R(Rd)A(Mx,R−d,x)A(My,R−d,y)\sum_{t=0}^R\sum_{d=0}^t\binom{t}{d}D_t(R,x,y)=\sum_{d=0}^R\binom{R}{d}A(M_x,R-d,x)A(M_y,R-d,y)t=0∑R​d=0∑t​(dt​)Dt​(R,x,y)=d=0∑R​(dR​)A(Mx​,R−d,x)A(My​,R−d,y)
上面这个式子成立,是因为左边插板法对应右边DtD_tDt​的ddd选择.
那么有:
∑t=0R∑d=0t(td)Dt(R,x,y)(−1)d\sum_{t=0}^R\sum_{d=0}^t\binom{t}{d}D_t(R,x,y)(-1)^dt=0∑R​d=0∑t​(dt​)Dt​(R,x,y)(−1)d
=∑d=0R(Rd)A(Mx,R−d,x)A(My,R−d,y)(−1)d=\sum_{d=0}^R\binom{R}{d}A(M_x,R-d,x)A(M_y,R-d,y)(-1)^d=d=0∑R​(dR​)A(Mx​,R−d,x)A(My​,R−d,y)(−1)d
其中:
∑t=0R∑d=0t(td)Dt(R,x,y)(−1)d\sum_{t=0}^R\sum_{d=0}^t\binom{t}{d}D_t(R,x,y)(-1)^dt=0∑R​d=0∑t​(dt​)Dt​(R,x,y)(−1)d
=∑t=0RDt(R,x,y)(1−1)t=D0(R,x,y)=\sum_{t=0}^RD_t(R,x,y)(1-1)^t=D_0(R,x,y)=t=0∑R​Dt​(R,x,y)(1−1)t=D0​(R,x,y)

令dp[x][t]dp[x][t]dp[x][t]为xxx拆分成ttt个数字,且只能是KKK个限制中的。
令Gd(R,x,y)G_d(R,x,y)Gd​(R,x,y)表示走d个非法向量,走到(x,y)(x,y)(x,y)的方案数。
则:F(d)=∑x(Rd)dp[x][d]D0(R,Tx−xG,Ty−xG)F(d)=\sum_{x}\binom{R}{d}dp[x][d]D_0(R,T_x-xG,T_y-xG)F(d)=x∑​(dR​)dp[x][d]D0​(R,Tx​−xG,Ty​−xG)
=∑t>=d(td)Gt(R,x,y)=\sum_{t>=d}\binom{t}{d}G_t(R,x,y)=t>=d∑​(dt​)Gt​(R,x,y)
二项反演有:
Gd(R,x,y)=∑d&lt;=n(−1)n−d(nd)F(d)G_d(R,x,y)=\sum_{d&lt;=n}(-1)^{n-d}\binom{n}{d}F(d)Gd​(R,x,y)=d<=n∑​(−1)n−d(dn​)F(d)
G0(R,x,y)=∑d&lt;=n(−1)nF(d)G_0(R,x,y)=\sum_{d&lt;=n}(-1)^{n}F(d)G0​(R,x,y)=d<=n∑​(−1)nF(d)
简单证一下:
已知:F(n)=∑t&gt;=n(tn)f(t)F(n) = \sum_{t&gt;=n}\binom{t}{n}f(t)F(n)=t>=n∑​(nt​)f(t)
则:∑t&gt;=n(−1)t−n(tn)F(t)=∑t&gt;=n(−1)t−n(tn)∑a&gt;=t(at)f(a)\sum_{t&gt;=n}(-1)^{t-n}\binom{t}{n}F(t)\\=\sum_{t&gt;=n}(-1)^{t-n}\binom{t}{n}\sum_{a&gt;=t}\binom{a}{t}f(a)t>=n∑​(−1)t−n(nt​)F(t)=t>=n∑​(−1)t−n(nt​)a>=t∑​(ta​)f(a)
通常情况下,上面和式不发散。则可以交和次序。
∑a&gt;=nf(a)∑t=na(−1)t−n(tn)(at)\sum_{a&gt;=n}f(a)\sum_{t=n}^{a}(-1)^{t-n}\binom{t}{n}\binom{a}{t}a>=n∑​f(a)t=n∑a​(−1)t−n(nt​)(ta​)
(tn)(at)=a!n!(t−n)!(a−t)!=a!(a−n!)!n(a−n)!(t−n)!(a−t)!=(an)(a−nt−n)\binom{t}{n}\binom{a}{t}=\frac{a!}{n!(t-n)!(a-t)!}\\=\frac{a!(a-n!)}{!n(a-n)!(t-n)!(a-t)!}\\=\binom{a}{n}\binom{a-n}{t-n}(nt​)(ta​)=n!(t−n)!(a−t)!a!​=!n(a−n)!(t−n)!(a−t)!a!(a−n!)​=(na​)(t−na−n​)
∑a&gt;=nf(a)∑t=na(−1)t−n(tn)(at)=∑a&gt;=nf(a)(an)∑t=na(−1)t−n(a−nt−n)=f(n)\sum_{a&gt;=n}f(a)\sum_{t=n}^{a}(-1)^{t-n}\binom{t}{n}\binom{a}{t}\\=\sum_{a&gt;=n}f(a)\binom{a}{n}\sum_{t=n}^a(-1)^{t-n}\binom{a-n}{t-n}=f(n)a>=n∑​f(a)t=n∑a​(−1)t−n(nt​)(ta​)=a>=n∑​f(a)(na​)t=n∑a​(−1)t−n(t−na−n​)=f(n)

所以有:F(n)=∑t&gt;=n(tn)f(t)F(n) = \sum_{t&gt;=n}\binom{t}{n}f(t)F(n)=t>=n∑​(nt​)f(t)可得:f(n)=∑t&gt;=n(−1)t−n(tn)F(t)f(n)=\sum_{t&gt;=n}(-1)^{t-n}\binom{t}{n}F(t)f(n)=t>=n∑​(−1)t−n(nt​)F(t)

/*1945555039024054273 = 27*2^56 +1G = 5*/
#include <algorithm>
#include <stdio.h>
#include <set>
#include <cmath>
#define MAXN 1000005
#define MAXR 1005
using namespace std;
typedef long long LL;
const int mod = 1e9+7;
const double PI = acos(-1.0);
int P[MAXN];
int Piv[MAXN];
int Mx,My;
void init()
{P[0] = 1;P[1] = 1;Piv[1] = 1;for(int i = 2; i < MAXN;i++){Piv[i] = mod - (LL)(mod/i)*Piv[mod%i]%mod;P[i] = LL(P[i-1])*i%mod;}for(int i = 2;i < MAXN;i++)Piv[i] = (LL)Piv[i-1]*Piv[i]%mod;Piv[0] = 1;
}inline int getC(int a,int b)
{if(b==0)return 1;if(a <0)printf("error\n");if(b < 0|| b > a)return 0;return ((LL)P[a]*Piv[b]%mod)*Piv[a-b]%mod;
}int tmpK[60];
int dp[MAXR][1005];
int Ax[MAXR][MAXR];
int Ay[MAXR][MAXR];
int Bx[MAXR][MAXR];
int By[MAXR][MAXR];void CalculateDp(int B, int R, int k)
{dp[0][0] = 1;for(int i = 1;i<R;i++){for(int j = 0;j<B;j++){for(int t = 0;t < k; t++){if(j<tmpK[t])continue;dp[j][i] +=dp[j-tmpK[t]][i-1];if(dp[j][i]>=mod)dp[j][i] -=mod;}}}
}int CalcD(int R,int x,int y)
{if(R<0)return 0;int ans = 0;for(int i=0;i<=R;i++){int u = (LL)getC(R,i)*Ax[R-i][x]%mod;u = (LL)u*Ay[R-i][y]%mod;if(i&1)u = (mod - u)%mod;ans += u;if(ans >= mod)ans -= mod;}return ans;
}// 5 5 4 4 2 1 3 1 2 3
//5 5 4 4 2 1 2 1 2int main ()
{init();int Tx, Ty, R, G, k;scanf("%d %d %d %d",&Tx, &Ty, &Mx, &My);scanf("%d %d", &R, &G);scanf("%d", &k);int B = min(Tx,Ty)/G + 1;for(int i = 0;i<k;i++){scanf("%d",tmpK + i);tmpK[i] /= G;}sort(tmpK, tmpK + k);B = min(B, tmpK[k-1]*R+1);for(int i=0;i<=R;i++){for(int x = 0;x< B;x++){int offset = x*G;for(int a =0,X = Tx - offset ;a <= i;a++){int b = X - (Mx +1)*a;if(b<0)break;LL u = (LL)getC(i,a)*getC(i+b-1,b)%mod;if(a&1) Ax[i][x] += (mod - u)%mod;else Ax[i][x] += u;if(Ax[i][x] >=mod)Ax[i][x] -= mod;}for(int a=0,Y = Ty - offset;a <=i;a++){int b = Y - (My +1)*a;if(b<0)break;LL u = (LL)getC(i,a)*getC(i+b-1,b)%mod;if(a&1) Ay[i][x] += (mod - u)%mod;else Ay[i][x] += u;if(Ay[i][x] >=mod)Ay[i][x] -= mod;}}}int ans = 0;if(k == 0){printf("%d\n",CalcD(R,0,0));return 0;}CalculateDp(B,R+1,k);int limR = min(Tx,Ty)/(tmpK[0]*G) + 1;//printf("%d ^^^^^\n",CalcD(2,3,3));for(int d = 0;d< limR;d++){int u = 0;for(int x = 0;x<B;x++){u += ((LL)getC(R,d)*dp[x][d]%mod)*CalcD(R-d,x,x)%mod;if(u>=mod)u-=mod;}if(d&1)u = (mod - u)%mod;ans = (ans + u)%mod;}printf("%d\n",ans);
}

51nod 1838相关推荐

  1. 51nod 1617 奇偶数组

    传送门 回来看一眼51nod,发现自己掉到rank4了,赶紧切道题回rank3. 一眼不会做,这种东西应该慢慢找规律吧--然后看到数据范围其实比较小,应该是单次log的,那是不是可以分治啊. #inc ...

  2. 51NOD 1773:A国的贸易——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1773 参考1:FWT讲解 https://www.cnblogs.com ...

  3. 51nod 1040:最大公约数之和(数论)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 给出一个n,求1-n这n个数,同n的最大公约数的和. ...

  4. (DP)51NOD 1183 编辑距离

    编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除 ...

  5. 斜率小于0的连线数量 51Nod - 1107 (树状数组+离散化)

    二维平面上N个点之间共有C(n,2)条连线.求这C(n,2)条线中斜率小于0的线的数量. 二维平面上的一个点,根据对应的X Y坐标可以表示为(X,Y).例如:(2,3) (3,4) (1,5) (4, ...

  6. 51Nod 1003 阶乘后面0的数量(数学,思维题)

    1003 阶乘后面0的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720 ...

  7. 51nod 1270 数组的最大代价

    1270 数组的最大代价 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 数组A包含N个元素A1, A2......AN.数组B包 ...

  8. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    51nod 算法马拉松18 B 非010串 矩阵快速幂 非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串 ...

  9. [51nod]1284 2 3 5 7的倍数(容斥原理)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1284 1 #include <iostream> ...

  10. 【51nod】2590 持续讨伐

    [51nod]2590 持续讨伐 挣扎着卡了卡常过了 记\(dp[i][j]\)为到第\(i\)位,和第\(i\)位相连的部分长度\(x^{j}\)乘上之前部分所有方案\(x^{K}\)总和 转移用二 ...

最新文章

  1. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)
  2. qt发布后 mysql数据库_qt发布后 mysql数据库
  3. 快手突然宣布取消大小周,改为按需加班,给加班工资!字节被打脸,员工吵翻天!...
  4. 亮度翻转_ROG幻13翻转本发布;联想IdeaPad 5G轻薄本即将上线
  5. iOS - OC iOS 开发体系
  6. log4j2自动删除_登录样式:log4j 2,上下文,自动清除…全部不附带任何字符串!...
  7. Esp8266物联网开发板详细使用教程
  8. html下移,jQuery实现元素的上移下移删除
  9. 关于虚拟主机软件配置的问题
  10. 2021-09-07
  11. java反编译 luyten_Java——反编译工具 JD-GUI procyon-decompiler luyten crf (转)
  12. 如何保持session一致性?
  13. 华为鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....
  14. 这猪蹄是人类能吃完的?
  15. linux安装程序企鹅,Linux-小企鹅输入法的安装与使用
  16. 【wireshark】如何获取一个设备的IP地址
  17. Chatgpt到底有多牛?
  18. 看雪pwn入门--基础篇
  19. js中的change事件
  20. 脉冲神经网络学习笔记(综述)

热门文章

  1. 《Redis视频教程》(p9)
  2. Win10卸载新版 Edge (基于Chromium)
  3. 为开发者们准备的10款超棒的jQuery视频插件
  4. Vue后台管理系统模板推荐
  5. linux node安装菜鸟教程,手把手告诉你如何安装多个版本的node
  6. 【f1c200s/f1c100s】PWM驱动适配
  7. 量产HLW8032串口通讯芯片的三相电参数采集系统项目资料
  8. 【论文学习】10、物联网安全WiFi设备的监控与识别
  9. Linux搭建Elasticsearch集群
  10. 怎么彻底卸载cad2017_彻底卸载cad2010的方法步骤