正题

题目链接:https://www.luogu.com.cn/problem/AT2070


题目大意

有三堆卡牌各有n,m,kn,m,kn,m,k张,每张上写了a/b/ca/b/ca/b/c,对于第1/2/31/2/31/2/3堆卡牌。然后开始从第一堆拿牌,然后根据拿到的牌在对应的堆拿牌。

如果到一堆拿牌时没有牌就结束,求第一张牌结束的方案数。

1≤n,m,k≤3×1051\leq n,m,k\leq 3\times 10^51≤n,m,k≤3×105


解题思路

显然牌的序列我们不是很好处理因为不是顺序拿的,我们可以操作每次取的堆的编号序列。

显然它的长度不是固定的,我们枚举其长度n+in+in+i(也就是除了nnn个111以外有iii个其他的)。

然后答案就是
∑i=0m+k3m+k−i(n+i−1i)∑i−k≤j≤m(ij)\sum_{i=0}^{m+k}3^{m+k-i}\binom{n+i-1}{i}\sum_{i-k\leq j\leq m}\binom{i}{j}i=0∑m+k​3m+k−i(in+i−1​)i−k≤j≤m∑​(ji​)
后面那个很难处理但是注意到区间的范围是每次向前移动,而且上面那个值是每次加一,暴力拆开
∑i−k≤j≤m(ij)=∑i−k≤j≤m(i−1j−1)+(i−1j)\sum_{i-k\leq j\leq m}\binom{i}{j}=\sum_{i-k\leq j\leq m}\binom{i-1}{j-1}+\binom{i-1}{j}i−k≤j≤m∑​(ji​)=i−k≤j≤m∑​(j−1i−1​)+(ji−1​)
⇒2∑i−1−k≤j≤m(i−1j)−(i−1i−1−k)−(i−1m)\Rightarrow 2\sum_{i-1-k\leq j\leq m}\binom{i-1}{j}-\binom{i-1}{i-1-k}-\binom{i-1}{m}⇒2i−1−k≤j≤m∑​(ji−1​)−(i−1−ki−1​)−(mi−1​)

然后就可以O(n)O(n)O(n)递推了。

时间复杂度:O(n+m+k)O(n+m+k)O(n+m+k)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e6+10,P=1e9+7;
ll n,m,k,ans,fac[N],inv[N],s[N],pw[N];
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
signed main()
{fac[0]=inv[0]=inv[1]=pw[0]=1;for(ll i=1;i<N;i++)pw[i]=pw[i-1]*3ll%P;for(ll i=2;i<N;i++)inv[i]=P-inv[P%i]*(P/i)%P;for(ll i=1;i<N;i++)fac[i]=fac[i-1]*i%P,inv[i]=inv[i-1]*inv[i]%P;scanf("%lld%lld%lld",&n,&m,&k);s[0]=1;ans=pw[m+k];for(ll i=1;i<=m+k;i++){s[i]=2*s[i-1]%P;if(i>m)(s[i]+=P-C(i-1,m))%=P;if(i>k)(s[i]+=P-C(i-1,i-k-1))%=P;(ans+=C(n+i-1,i)*s[i]%P*pw[m+k-i])%=P;}printf("%lld\n",ans);return 0;
}

AT2070-[ARC061D]3人でカードゲーム/Card Game for Three【计数,组合数学】相关推荐

  1. 查询成绩小于85且是计算机的一项应用,查询练习2

    查询练习 创建表 学生表 student 学号 姓名 性别 出生日期 班级 create table student( sno varchar(20) primary key, sname varch ...

  2. 以太坊毕业设计DAPP开发-彩票的设计与实现

    以太坊DAPP开发-彩票的设计与实现 一.项目背景 ​ 传统的彩票网站存在暗箱操作,容易贪污跑路的问题,而基于以太坊的彩票网站,则有着公开,公正,公平的优点. 二.业务需求 1.全民参与(任何地址都可 ...

  3. React 集成 ECharts实现柱状图、折线图、饼状图

    一.简介 ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Saf ...

  4. OpenCV基础知识入门

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文旨在让你快速入门opencv. OpenCV OpenCV是计 ...

  5. 数据库9:联结表 高级联结 组合查询 全文本搜索

    第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分. ...

  6. Java_案例实例2.约瑟夫环问题

    约瑟夫环问题描述: 编号为1-N的N个人按顺时针方向围坐成一圈,从第S个人开始报数(从1报起),报数为M的人出圈,再从他的顺时针方向的下一个人重新开始报数,如此下去,直至所有人出圈为止,给出N个人的出 ...

  7. Cachegrind:缓存和分支预测分析器

    目录 5.1.概观5.2.使用Cachegrind,cg_annotate和cg_merge 5.2.1.运行Cachegrind5.2.2.输出文件5.2.3.运行cg_annotate5.2.4. ...

  8. 信息学奥赛一本通 1109:开关灯 | OpenJudge NOI 1.5 31:开关灯

    [题目链接] ybt 1109:开关灯 OpenJudge NOI 1.5 31:开关灯 [题目考点] 1. 模拟 2. 循环.数组 3. 用逗号分隔输出 设标志位:isFirst,表示现在输出的是否 ...

  9. Android 应用开发(第四章)---APP数据埋点

    手把手教你进行APP数据埋点 经过大半年的努力,产品终于开始趋向稳定,之前的版本一直在探索,需求经常改动,没时间系统进行埋点.随着产品的稳定以及工作的深入,越发认识到数据的重要性,所以开始着手数据埋点 ...

最新文章

  1. H3C 多区域MSTP配置
  2. python的lambda函数_Python-Lambda函数的范围及其参数?
  3. SpringBoot快速开发利器:Spring Boot CLI
  4. 科学家研发机器人混入南极企鹅群 获“友好”对待
  5. python爬b站评论_Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy
  6. c语言程序设计7.4思考题答案,C语言程序设计习题集及答案(7)
  7. MySQl求奇数和函数_收集的48个Shell脚本小技巧
  8. Windows10 【系统周期表】【系统下载表】【大型软件表】
  9. 文档和元素的几何滚动
  10. [Selenium] CSS3 选择器
  11. ibatis 存储过程 结果集 map_「大数据」(七十五)Spark之弹性分布式数据集
  12. 手机越“清理”越卡顿,清理软件“坑”过你吗?
  13. FOC:【2】SVPWM(七段式)的Verilog实现与仿真
  14. 使用防火墙禁止软件联网
  15. unicode编码表,转载自:近來情轉深的博客
  16. 通过分类为数组元素添加一个倒序的方法.
  17. (原创)数字电路设计基础 大一期末 项目 交通灯控制器设计
  18. restTemplate接收image/jpeg格式
  19. Activiti学习之根据条件判断流程走向
  20. 中南大学计算机2020研究生分数线,中南大学2020年考研复试分数线已公布

热门文章

  1. getchar()到底怎么用_怎样才能真正发挥肥效,腐植酸水溶肥到底怎么用
  2. layui 如何去dom_javascript 怎么去引用layui里面的方法
  3. ab st语言编程手册_西门子PLC编程SCL和LAD谁才是王者?一起讨论一下
  4. php post api json数据,php – REST API:请求身份为JSON或纯POST数据?
  5. 京瓷1020怎么打印自检页_[建筑]喷墨打印机如何打印自检页 详细
  6. c语言中文件如何插入数据,急求如何将下列C语言程序数据存储到文件中?
  7. leetcode54:螺旋矩阵
  8. [PAT乙级]1007 素数对猜想
  9. C++类对象作为类成员
  10. 操作系统习题——第一章