找性质的能力不行

Problem Statement

We have a sequence of $N$ integers: $x=(x_0,x_1,\cdots,x_{N−1})$. Initially, $x_i=0$ for each $i (0≤i≤N−1)$.

Snuke will perform the following operation exactly $M$ times:

Choose two distinct indices $i,j (0≤i,j≤N−1, i≠j)$. Then, replace $x_i$ with $x_i+2$ and $x_j$ with $x_j+1$.
Find the number of different sequences that can result after $M$ operations. Since it can be enormous, compute the count modulo $998244353$.

Constraints

  • $2≤N≤10^6$
  • $1≤M≤5×10^5$
  • All values in input are integers.

题目分析

这类题的一般套路是把一些奇奇怪怪的操作转化成局部量守恒;或者是操作对一些特殊量的影响有什么限制。

这里首先能够看出限制一:$\forall a_i \le 2m$.

再来考察一下操作有什么特性:在两个位置$i,j$分别加上$2,1$也就是把$j$的奇偶性翻转;$i$的奇偶性不影响。初始每个位置都为偶。这说明全部操作只有$m$次翻转奇偶性的机会,由此得到限制二:$\sum\limits [x_i为奇数]\le m$.

这两个限制的必要性上面已经论述了,充分性可以通过对$m$归纳得到。

现在问题变成了:

给定$n,m$,求长度为$n$的可空数列$\{x_i\}$满足$[\sum x_i=3m ]\and [\forall x_i \le 2m ]\and [\sum\limits [x_i为奇数]\le m]$的个数。

第一条限制很好处理,问题主要是第二条限制。

首先来考虑单纯满足第二条限制的数列个数,不妨记$f(n,m,k)$表示把$m$分为$n$组非空、且奇数个数$\le k$的方案数。那么这里有$f(n,3m,m)=\sum\limits _{p=1,p≡3m\pmod 2}^n {\frac{3m-p}{2}+n-1\choose n-1}{n \choose p}$,其中$p$是枚举的奇数个数。

容斥地考虑,现在要计算的另一部分问题应是$[\exists x_i > 2m ]\and [\sum\limits [x_i为奇数]\le m]$,也即:枚举最大数位置$pos$,把$m$分为$n$组非空、奇数个数$\le k$、且$x_{pos}$非空的方案数。

这里的“某一位置非空”就是很经典的问题了,可以先用$m-1$构造非空数列、再将$1$加到$x_{pos}$上;也可以再容斥一次,用$m$构造$n$的方案减去用$m$构造$n-1$的方案,意即此位置为零不占用$m$.

 #include<bits/stdc++.h>
#define MO 998244353
typedef long long ll;
const int maxn = ; ll n,m,ans;
ll inv[maxn],fac[maxn]; ll C(ll n, ll m)
{
if (n < m) return ;
return fac[n]*inv[m]%MO*inv[n-m]%MO;
}
ll f(ll n, ll m, ll k)
{
ll ret = ;
for (ll p=; p<=k; p++)
if (((m-p)&)==){
ret = (ret+C((m-p)/2ll+n-, n-)*C(n, p)%MO)%MO;
}
return ret;
}
int main()
{ scanf("%lld%lld",&n,&m);
fac[] = inv[] = inv[] = ;
for (int i=; i<=n+*m; i++)
inv[i] = (MO-1ll*MO/i*inv[MO%i]%MO);
for (int i=; i<=n+*m; i++)
inv[i] = inv[i-]*inv[i]%MO, fac[i] = fac[i-]*i%MO;
// ans = (f(n, 3*m, m)-n*(f(n, m, m)-f(n-1, m, m))%MO+MO)%MO;
ans = (f(n, *m, m)-n*(f(n, m-, m))%MO+MO)%MO;
printf("%lld\n",ans);
return ;
}

END

【组合数学】AGC036C - GP 2的更多相关文章

  1. AGC036C GP 2

    由于近期集训做的一直都是校内题 然后好久都怎么写题了( 发篇博客证明我还活着 (其实也没人关心 好像并不是很难的一道计数 就是脑子总是缺一块导致会做不出来( 首先我们可以分析性质 1.$\sum A_ ...

  2. AtCoder AGC036C GP 2 (组合计数)

    题目链接 https://atcoder.jp/contests/agc036/tasks/agc036_c 题解 终于有时间补agc036的题了. 这题其实不难的来着--我太菜了考场上没想出来 首先 ...

  3. 【atcoder】GP 2 [agc036C]

    题目传送门:https://atcoder.jp/contests/agc036/tasks/agc036_c 题目大意:给你一个长度为$N$初始全0的序列,每次操作你可以找两个不同的元素,一个自增1 ...

  4. ae GP制作缓冲区分析

    private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { // ...

  5. AE开发实现GP工具IDW

    IDW——空间插值 IDW(Inverse Distance Weighted)是一种常用而简便的空间插值方法,它以插值点与样本点间的距离为权重进行加权平均,离插值点越近的样本点赋予的权重越大. 设平 ...

  6. ArcGIS10.1 发布气温插值GP服务

    首先通过ModelBuilder 工具 构建模型 然后通过模块右键 设置输入参数 或者直接将一个模块设为输入参数 在输出模块的右键属性上 可以设置lyr文件用于渲染 设置数据添加到显示用于不是发布的时 ...

  7. AE调用GP工具的方法(转)

    第一,首先要明确自己需要调用arctoolbox里面的什么工具,实现什么样的功能. 第二,按照需求看看在arctoolbox工具中是怎么实现功能的,然后确定需要的数据源. 第三,编写command或t ...

  8. GP 环境参数名称列表

    Using environment settings In this topic About using environment settings Environment settings summa ...

  9. GP调用arctoolbox 以Clip为例

    GP的功能非常强大,也是GIS建模的一个很重要的工具.在Arcengine中,实现Clip功能很多种方法,可以用IBasicGeoprocessor的clip方法,但是GP无疑是最简单的. publi ...

随机推荐

  1. 最新 易车java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.易车等10家互联网公司的校招Offer,因为某些自身原因最终选择了易车.6.7月主要是做系统复习.项目复盘.LeetCode ...

  2. layui layer.open弹出框获取不了 input框的值

    layer.open({ title:'添加管理员', type: 1, content: $('.add_html').html(), btn:['添加', '取消'], btnAlign:'c', ...

  3. request方法

    获取请求行方法: getMethod()获取请求的方法 getContextPath()回去虚拟路径 getServletPath()获取路径(只有在servert中使用) getQueryStrin ...

  4. 数据结构:BF算法

    贴上源代码: #include<iostream> using namespace std; int BF(char S[],char T[]) { int i,j; i = j = 0; ...

  5. [游戏复刻] 2048(2014. Android)

    等哪一天我有很多很多的时间再写吧...

  6. fiddler笔记:主菜单栏

    主菜单可以启动几乎所有的fiddler功能.菜单系统通过FiddlerScript或Extensions进行扩展和增强. 1.File菜单 File菜单主要是用来启动和停止web流量的捕获,也可以加载 ...

  7. Python基础 第三章 使用字符串(3)字符串方法&本章小结

    字符串的方法非常之多,重点学习一些最有用的,完整的字符串方法参见<Python基础教程(第三版)>附录B. 模块string,虽然风头已小,但其包含了一些字符串方法中没有的常量和函数,故将 ...

  8. python 比对PDF文件

    基本思路: 1.读取pdf内容,存放到不同的 list 2.比较 list 的相似度 ------------------------ 实现------------------------- 1.PD ...

  9. NetCore2.x 使用Log4Net(一)

    前言:本章仅仅是Log4Net的基本简单的运用,后续章节会按照我的项目使用情况进行深入研究 1.项目搭建 新建一个基于.netCore2.x的Web项目          =>   过程略 给新 ...

  10. ADO与达梦7产生的一个未知问题

    采用OLEDB与达梦7建立数据库连接 连接成功 查询表成功 打开表成功 当进行到addnew 操作时  报异常,未知错误 而且是仅针对这张表 ,其他表都没有问题 当清空数据后可以再插入一次数据,之后就 ...