由于近期集训做的一直都是校内题 然后好久都怎么写题了(

发篇博客证明我还活着 (其实也没人关心

好像并不是很难的一道计数 就是脑子总是缺一块导致会做不出来(

首先我们可以分析性质

1.$\sum A_i = 3m$ 显然

2.$\sum A_i \&1 <= m$ 考虑我们的1 对于一个位置上有2个1我们可以将其合并看成2 所以显然不会有超过m个奇数

3.$max(A_i)<=2m$ 因为一次操作最多能使一个数+2 依旧显然

得到了3个显然的结论 我们依旧不会做这个题

我们先考虑前两种限制 这个比较好解决 我们可以枚举奇数的个数 另$F(n,m,k)$表示一共n个数和为m有不超过k个奇数

根据插板法 我们可以得到柿子 $F(n,m,k)=\sum_{i=0}^{max(n,k)}C(n,i)*C((m-i)/2+n-1,n-1)$ 应该比较好理解

我们继续考虑最后一个限制 可以想到>2m的数不会超过1个 我们可以钦定$a_1>2m$最后乘上n即可 然后让$a_1 = a_1 - 2m$

然后我们的限制就变成了 前两个限制+$a_1>0$ 接着继续处理$a_1>0$

我们发现我们可以直接让$n=n-1$钦定$a_1=0$ 然后就是只考虑前两种限制了 相减就好了

最后的答案就是 $F(n,3m,m)-n(F(n,m,m)-F(n-1,m,m))$

然后这里的复杂度上界其实是预处理$O(n+m)$

计数什么的还是好神仙啊。

//Love and Freedom.
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#define ll long long
#define inf 20021225
#define mdn 998244353
#define N 3000001
using namespace std;
int read()
{
int s=,f=; char ch=getchar();
while(ch<'' || ch>'') {if(ch=='-') f=-;ch=getchar();}
while(ch>='' && ch<='') s=s*+ch-'',ch=getchar();
return f*s;
}
int fac[N],inv[N];
void upd(int &x,int y){x+=x+y>=mdn?y-mdn:y;}
int ksm(int bs,int mi)
{
int ans=;
while(mi)
{
if(mi&) ans=1ll*ans*bs%mdn;
bs=1ll*bs*bs%mdn; mi>>=;
}
return ans;
}
void init(int n)
{
fac[]=;
for(int i=;i<=n;i++) fac[i]=1ll*fac[i-]*i%mdn;
inv[n]=ksm(fac[n],mdn-);
for(int i=n;i;i--) inv[i-]=1ll*inv[i]*i%mdn;
}
int C(int n,int m)
{
if(n<m) return ;
return 1ll*fac[n]*inv[n-m]%mdn*inv[m]%mdn;
}
int F(int n,int m,int k)
{
int top=min(n,k),ans=;
for(int i=;i<=top;i++) if(!((m-i)&) && m>=i)
upd(ans,1ll*C(n,i)*C(n-+(m-i)/,n-)%mdn);
return ans;
}
int main()
{
int n=read(),m=read(); init(n+*m);
int ans=F(n,m*,m)-1ll*(F(n,m,m)-F(n-,m,m)+mdn)%mdn*n%mdn;
printf("%d\n",(ans+mdn)%mdn);
return ;
}

AGC036C

最新文章

  1. NOI2009 诗人小G
  2. JS魔法堂:浏览器模式和文档模式怎么玩?
  3. logDemo
  4. 解决方案:将已存在的项目 添加到 tfs解决方案中的时候 出现:新项目不能成功加入源码控制
  5. 使用手机模拟器与android操作系统
  6. 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别
  7. poj 2553 强连通分支与缩点
  8. 未能导入activex控件,请确保它正确注册
  9. UItexfile实时验证输入字符
  10. gson学习以及进阶文章推荐
  11. Python实战之dict简单练习
  12. python崩溃到现在居然还没有放弃的Day07
  13. 《JavaScript DOM编程艺术》学习笔记(二)
  14. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(9)- KBOOT特性(IntegrityCheck)
  15. VirtualBox通过Host-Only网络连接方式实现宿主机与虚拟机通信
  16. 公众号获取unionid
  17. php -- 正则替换
  18. linux学习笔记-目录结构(1)
  19. 【BZOJ5281】Talent Show(分数规划)
  20. 开源的DirectUI界面库

热门文章

  1. router-link传递参数并获取
  2. uva live 7637 Balanced String (贪心)
  3. How To Use the Widget Factory 使用widget factory创建插件
  4. node.js运行配置(vs code非控制台输出)
  5. Git 创建版本库并实现本地上传数据到GitHub库
  6. Jeecg心得篇--这个世界不缺程序员,而是缺少匠人和架构师
  7. 【cs231n作业笔记】二:SVM分类器
  8. Delphi XE2 之 FireMonkey 入门(25) - 数据绑定: TBindingsList: 表达式的灵活性及表达式函数
  9. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_1_IO概述(概念&amp;分类)
  10. delphi SetWindowPos改变窗体位置和状态