https://www.luogu.com.cn/problem/AT3576

又盯了半个多小时才看懂之前写的是啥

妙妙组合数学思维题啊啊

首先不管s,ts,ts,t,要拿红球肯定是从111开始拿,不亏

假设要拿第一个蓝球了,那么我们可以把ttt设到当前蓝球第一个位置,不亏

假设ttt那个位置已经没有球了,但还是想要拿篮球,那把sss设到现在蓝球的第一个位置,不亏

然后就可以考虑计算了

假设从ttt处拿了iii个蓝球,那么要从111处拿B−iB-iB−i个蓝球,才能让ttt那个位置没有球,进入第三步

假设从sss处拿了jjj个蓝球,那么要从111处拿走B−i−jB-i-jB−i−j个红球,才能让sss处没有球

第一个是(B−1i−1)\large \binom{B-1}{i-1}(i−1B−1​),因为第一个拿了肯定是蓝球,随意上下都要−1-1−1,同理,第二个是(B−i−1j−1)\large \binom{B-i-1}{j-1}(j−1B−i−1​)

还剩下A−(B−i)−(B−i−j)A-(B-i)-(B-i-j)A−(B−i)−(B−i−j)个红球,可以在s,ts,ts,t拿蓝球之前,第二步之后任意取,共333段,用插板法可得为

(A−(B−i)−(B−i−j)−13−1)\large \binom{A-(B-i)-(B-i-j)-1}{3-1}(3−1A−(B−i)−(B−i−j)−1​)

(剩下的蓝球只能从AAA处一个个取了)

因为上面那种只考虑的分成三段的情况,实际上可以蓝色整个作为一段,那样的方案数是A+1A+1A+1的,单独加上即可

code:


#include<bits/stdc++.h>
#define ll long long
#define N 4050
#define mod 1000000007
using namespace std;
int a, b, c[N][N];
int C(int n, int m) {if(m > n || n < 0 || m < 0) return 0;return c[n][m];
}
int main() {scanf("%d%d", &a, &b);for(int i = 0; i <= a + b; i ++) c[i][0] = 1;for(int i = 1; i <= a + b; i ++) for(int j = 1; j <= i; j ++)c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;ll ans = a + 1;for(int i = 1; i <= b; i ++)for(int j = 1; j <= b - i; j ++)ans = (ans + 1ll * C(b - 1, i - 1) * C(b - 1 - i, j - 1) % mod * C(a - (b - i) - (b - i - j) + 2, 2) % mod) % mod;printf("%lld", ans);return 0;
}

AT3576 Popping Balls相关推荐

  1. AT3576 E Popping Balls——计数思路

    题目:https://code-festival-2017-qualb.contest.atcoder.jp/tasks/code_festival_2017_qualb_e 题解:https://w ...

  2. 例题6-6 小球下落(Dropping Balls, UVa 679)

    例题6-6 小球下落(Dropping Balls, UVa 679) 许多的小球一个一个的从一棵满二叉树上掉下来组成一个新满二叉树,每一时间,一个正在下降的球第一个访问的是非叶子节点.然后继续下降时 ...

  3. AC日记——Red and Blue Balls codeforces 399b

    399B - Red and Blue Balls 思路: 惊讶的发现,所有的蓝球的消除都是独立的: 对于在栈中深度为i的蓝球消除需要2^i次操作: 代码: #include <cstdio&g ...

  4. HEU 4048 Picking Balls

     1/**//**************************************  2Problem: HEU 4048 Picking Balls  3Time: 0.0000 s  4M ...

  5. POJ 3687 Labeling Balls(拓扑序列)

    Labeling Balls   大意:n个重量分别为1-n的小球,给定一些小球间的重量关系. 在符合重量关系的前提下,先输出编号小的球. 思路:也是一道很简单的拓扑排序,不过要倒着来,注意一下要判重 ...

  6. IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) A. Bear and Three Balls 水题

    A. Bear and Three Balls 题目连接: http://www.codeforces.com/contest/653/problem/A Description Limak is a ...

  7. HDU 4611 Balls Rearrangement 数学

    Balls Rearrangement 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4611 Description Bob has N balls ...

  8. SGU 183. Painting the balls( dp )

    dp..dp(i, j)表示画两个点为i-j, i的最优答案. dp(i, j) = min{ dp(i-j, k) } + cost[i] (1≤k≤M-j) 令f(i, j) = min{dp(i ...

  9. CF755G PolandBall and Many Other Balls(多项式/倍增fft)

    CF755G PolandBall and Many Other Balls 倍增fft模版题 这种问题关键在于两个状态转移,一个是单点加1,还有一个是乘2,这样我们就相当于拥有了二进制下的左移操作和 ...

最新文章

  1. python_socket
  2. nginx负载均衡策略upstream
  3. Commvault发布V11版数据管理平台 优化数据资源
  4. Linux系统之TroubleShooting(启动故障排除)
  5. 工作146:webstorm持续updating indices解决方法
  6. websocket 业务提醒 .net_7年.NET 面试 Java 的尴尬历程
  7. 在python中字典和集合都是用一对什么作为界定符_Python习题(一)
  8. python实现将一个文件夹下的文件路径写入到指定的txt文件中
  9. 2020年中国最具影响力的50位商界领袖:马云、任正非、王传福位列前三
  10. 火狐浏览器jtopo节点切换tab后消失报错NS_ERROR_FAILURE的解决
  11. django小站,数据3w+
  12. JavaSE 帮助文档下载
  13. TCA笔记4:TCA代码笔记
  14. 单向可控硅的工作原理
  15. Linux服务器间信任关系建立方法
  16. Java系列之—— getBytes() 方法
  17. NumPy 取消科学计数法:np.set_printoptions(suppress=True)
  18. 多功能网络侦查OSINT工具,FinalRecon
  19. 电脑怎样设置桌面待办,桌面待办事项软件
  20. 老男孩Python全栈9期视频完整版

热门文章

  1. sqlserver 统计专业中班级数和男生、女生各有多少人
  2. QT中$$PWD的意思
  3. 微信公众账号使用获取token次数到达上限reach max api daily quota limit rid: 5fd6fd6a-49fcc7d4-65df845f
  4. android切换横竖,Android横竖屏切换工具
  5. Unity:RectTransform面板属性获取
  6. QT发生crashed
  7. q创建群聊显示服务器繁忙是什么意思,一种堵车时聊天群的建立方法及系统
  8. 人体姿态骨架估计算法研究
  9. 持续集成/持续部署(1)Git Gitlab
  10. linux下做桌面应用程序,PinePhone成功演示运行Linux桌面应用程序