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

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

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

首先我们可以分析性质

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

AGC036C GP 2的更多相关文章

  1. 【组合数学】AGC036C - GP 2

    找性质的能力不行 Problem Statement We have a sequence of $N$ integers: $x=(x_0,x_1,\cdots,x_{N−1})$. Initial ...

  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. 双边滤波Matlab代码

    %简单地说: %A为给定图像,归一化到[,]的矩阵 %W为双边滤波器(核)的边长/ %定义域方差σd记为SIGMA(),值域方差σr记为SIGMA() %%%%%%%%%%%%%%%%%%%%%%%% ...

  2. 我的"开发工具箱"

    我使用的IDEA插件 Free Mybatis plugin Alibaba Java Coding Guidelines 我的IDEA开发配置 配置Maven Runner -DarchetypeC ...

  3. oracle常用sql语句和函数

    --查询表的字段数 select count(*) from user_tab_columns where table_name = '表名'; --查询数据库用户密码的profile(一般为defa ...

  4. EnumMap 源码分析

    EnumMap EnumMap 能解决什么问题?什么时候使用 EnumMap? 1)EnumMap[枚举映射]中的键值必须来自单个枚举. 2)EnumMap 根据枚举键的自然顺序来维护,迭代遍历是有序 ...

  5. 博客中gitalk最新评论的获取 github api使用

    博客中,对于网友的评论以及每篇文章的评论数还是很重要的.但是基于静态的页面想要存储动态的评论数据是比较难的,一般博客主题中都内置了评论插件,但是博客主题中对于最新评论的支持显示还是很少的,至少目前我是 ...

  6. Week 7 - 714. Best Time to Buy and Sell Stock with Transaction Fee & 718. Maximum Length of Repeated Subarray

    714. Best Time to Buy and Sell Stock with Transaction Fee - Medium Your are given an array of intege ...

  7. 获取react中高阶组件方法

    什么是高阶组件? 高阶组件就是接受一个组件作为参数并返回一个新组件的函数.这里需要注意高阶组件是一个函数,并不是组件,这一点一定要注意.同时这里强调一点高阶组件本身并不是 React API.它只是一 ...

  8. 类BigInteger

    BigInteger类 可以让超过Integer范围内的数据进行运算 构造方法 public BigIntege(String val); package com.jacky; import java ...

  9. 69.x的平方根

    class Solution: def mySqrt(self, x: int) -> int: if x < 2: return x left, right = 1, x//2 whil ...

  10. 第七周实验报告&课程总结

    一.完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. 代码: public cla ...