Problem Statement

You are given integers $R$, $G$, $B$, and $K$. How many strings $S$ consisting of R, G, and B satisfy all of the conditions below? Find the count modulo $998244353$.

  • The number of occurrences of R, G, and B in $S$ are $R$, $G$, and $B$, respectively.
  • The number of occurrences of RG as (contiguous) substrings in $S$ is $K$.

Constraints

  • $1 \leq R,G,B\leq 10^6$
  • $0 \leq K \leq \mathrm{min}(R,G)$
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

$R$ $G$ $B$ $K$

Output

Print the answer.


Sample Input 1

2 1 1 1

Sample Output 1

6

The following six strings satisfy the conditions.

  • RRGB
  • RGRB
  • RGBR
  • RBRG
  • BRRG
  • BRGR

Sample Input 2

1000000 1000000 1000000 1000000

Sample Output 2

80957240

Find the count modulo $998244353$.

这个数据范围一看就知道不好 dp,大概率是推式子。

恰好 \(k\) 个不好求,但是我们可以想到一个答案很接近的方法:将一个 RG 打包成一个数,然后让其参与排列。

按照上面这种方法,定义 \(f(i)\) 为如果有 \(i\) 个 RG,将其打包成一份后算出来的答案。易得 \(f(i)=C_{r+g+b-i}^{b}*C_{r+g-i}^{i}\)

如果定义 \(g(i)\) 为恰好有 \(i\) 个 RG 的方案数,那么考虑一个 \(f(i)\) 中算了几次 \(g(j)\),那么会发现对于一种方案中 \(j\) 个 RG,选出 \(i\) 个 RG 的方案都会被算一次。那么得到 \(f(i)=\sum\limits_{j=i}^{\infin}C_{j}^ig(j)\)

上二项式反演公式, \(g(i)=\sum\limits_{j=i}^{\infin}(-1)^{j-i}C_{j}^if(j)\)

那么这个问题就解决了。

#include<cstdio>
const int N=3e6+5,P=998244353;
int jc[N],r,g,b,k,n,ans,inv[N];
int pown(int x,int y)
{
if(!y)
return 1;
int t=pown(x,y>>1);
if(y&1)
return 1LL*t*t%P*x%P;
return 1LL*t*t%P;
}
int ct(int x,int y)
{
if(x<y)
return 0;
return 1LL*jc[x]*inv[y]%P*inv[x-y]%P;
}
int calc(int x)
{
n=r+g+b-x;
return 1LL*ct(n,b)%P*ct(n-b,x)%P*ct(n-b-x,r-x)%P;
}
int main()
{
scanf("%d%d%d%d",&r,&g,&b,&k),inv[0]=1;
for(int i=jc[0]=1;i<=r+g+b;i++)
jc[i]=1LL*jc[i-1]*i%P,inv[i]=pown(jc[i],P-2);
for(int i=k;i<=r&&i<=g;i++)
ans+=((i-k&1)? -1LL:1LL)*ct(x,k)*calc(i)%P,ans=(1LL*ans+P)%P;
printf("%d",ans);
}

[ABC266G] Yet Another RGB Sequence的更多相关文章

  1. 【arc074e】RGB Sequence(动态规划)

    [arc074e]RGB Sequence(动态规划) 题面 atcoder 洛谷 翻译见洛谷 题解 直接考虑暴力\(dp\),设\(f[i][j][k][l]\)表示当前考虑到第\(i\)位,最后一 ...

  2. [Arc074E] RGB Sequence

    [Arc074E] RGB Sequence Description 今天也在愉快地玩Minecraft!现在MM有一块1?N的空地,每个格子按照顺序标记为1到N.MM想要在这块空地上铺上红石块.绿宝 ...

  3. AtCoder - 2567 RGB Sequence

    Problem Statement There are N squares arranged in a row. The squares are numbered 1, 2, …, N, from l ...

  4. AT2567-[ARC074C]RGB Sequence【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2567 题目大意 长度为\(n\)的包含三种颜色\(RGB\)的序列,\(m\)个限制\([l,r,k]\)表示 ...

  5. AT2567 RGB Sequence dp

    正解:计数dp 解题报告: 传送门! umm其实我jio得dp的题目的话就难在思想昂,,,知道状态知道转移就不难辣QAQ 所以就不说别的了直接写下思路放下代码就over辣QAQ 最基础的思想就是f[i ...

  6. [AT2567] [arc074_c] RGB Sequence

    题目链接 AtCoder:https://arc074.contest.atcoder.jp/tasks/arc074_c 洛谷:https://www.luogu.org/problemnew/sh ...

  7. 【ARC074e】RGB sequence

    Description ​ 一排\(n\)个格子,每个格子可以涂三种颜色的一种.现在给出\(m\)个形如"\([l,r]\)中必须恰好有\(x\)种颜色"的限制(\(1 \le l ...

  8. 【arc074e】RGB Sequence dp

    Description ​ 丰泽爷今天也在愉快地玩Minecraft! ​ 现在丰泽爷有一块1∗N1∗N的空地,每个格子按照顺序标记为11到NN.丰泽爷想要在这块空地上铺上红石块.绿宝石块和钻石块作为 ...

  9. ARC074 E RGB Sequence DP

    ---题面--- 题解: 首先,有一个不太直观的状态,f[i][j][k][l]表示DP到i位,三种颜色最后出现的位置分别是j, k, l的方案数.因为知道了三种颜色最后出现的位置,因此也可以得知以当 ...

  10. AtCoder Regular Contest 074 E:RGB Sequence

    题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_c 题目翻译 给你一行\(n\)个格子,你需要给每个格子填红绿蓝三色之一,并且同时满足\(m\ ...

随机推荐

  1. 白话领域驱动设计DDD

    容我找个借口先,日常工作太忙,写作略有荒废.一直想聊下领域驱动设计,以下简称DDD,之前也看过一些教程,公司今年两个项目--银行核心和信用卡核心,都深度运用DDD成功落地,有人说DDD挺难理解,在此讲 ...

  2. 提高 MySQL查询效率的方法

    当涉及到提高MySQL查询效率时,以下是一些重要的策略和技巧,可以帮助你优化数据库性能.无论你是一个Web开发者.数据工程师还是系统管理员,这些方法都可以帮助你确保你的MySQL数据库运行得更快.更有 ...

  3. k8s 自动扩缩容HPA原理及adapter配置详解👑

    大家好,我是蓝胖子,都知道,k8s拥有自动扩缩容机制HPA,我们能够通过配置针对不同的扩缩容场景进行自动扩缩容,往往初学者在面对其中繁多配置的时候会学了又忘记,今天我将会以一种不同的视角,结合api ...

  4. Harry Potter RPG_1

    RPG--Harry Potter 博主最近迷上了<Harry Potter> So 我制作了一款RPG对话模拟游戏, 目前主线以进行到了分院以后: 有兴趣的小伙伴可以看看,能点个关注就更 ...

  5. stm32开发笔记

    STM32F103C8T6单片机简介 标准库与HAL库区别 寄存器 寄存器众多,需要经常翻阅芯片手册,费时费力: 更大灵活性,可以随心所欲达到自己的目的: 深入理解单片机的运行原理,知其然更知其所以然 ...

  6. 搞懂fflush(stdout)

    使用 printf 或 cout 打印内容时,输出永远不会直接写入"屏幕".而是,被发送到 stdout. (stdout 就像一个缓冲区) 默认情况下,发送到 stdout 的输 ...

  7. destoon上做纯js实现html指定页面导出word

    因为最近做了范文网站需要,所以要下载为word文档,如果php进行处理,很吃后台服务器,所以想用前端进行实现.查询github发现,确实有这方面的插件. js导出word文档所需要的两个插件: 1 2 ...

  8. gitlab ci 用 cypress/playwright 做测试并展示结果至 mr

    前言 看了一下官方的教程好像都没有讲怎么将测试结果展示出来,只是给出测试的 ci 脚本,但根据 gitlab 官方的文档是有测试报告的展示的,所以这里给出一个基于 junit 测试报告的展示. 前期准 ...

  9. Vue项目打包为桌面应用

    vue项目首先使用 npm run build 打包为dist文件后,进入dist目录得到如下文件:就是打包后的html+css+js+static 新建一个deskapp文件夹,里面在新建一个App ...

  10. Java安全机制之一——SecurityManager和AccessController

    前言: 在看socket相关代码的时候,AbstractPlainSocketImpl中的一段代码吸引了我,其实之前见过很多次类似的代码,但一直不想去看,只知道肯定和权限什么的相关,这次既然又碰到了就 ...