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

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

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

首先我们可以分析性质

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. 5-2 Django的路由层(urlconf) 2

    django2.0版的path 思考情况如下: urlpatterns = [ re_path('articles/(?P<year>[0-9]{4})/', year_archive), ...

  2. COUNT 和 IFNULL函数

    用COUNT函数: mysql> SELECT count(one) FROM tb_test;+------------+| count(http://www.amjmh.com/v/BIBR ...

  3. Broken pipe

    出现broken pipe 的一种情况是向socket写数据,但是对端已经关闭socket连接,此时会触发SIGPIPE信号,该信号可以捕获. signal(SIGPIPE, SIG_IGN);

  4. tab下图表展示宽高为0的问题

    tab下,默认展示第一个tab(最新订阅),第二个tab是echarts,需要动态获取父级div的宽高并赋值到图表的DOM的宽高.在实际开发过程中,发现无论如何延迟处理,或者mounted,第二个ta ...

  5. vmware 虚拟 CPU 性能计数器事件与主机 CPU 不兼容。

    错误提示:虚拟 CPU 性能计数器事件与主机 CPU 不兼容. 点放弃 如果是暂时状态选关机, 丢失掉运行状态,即可保留硬盘内容重新开机

  6. log4j配置参数详解——按日志文件大小、日期切分日志文件

    项目中尽管对log4j有基本的配置,例如按天生成日志文件以作区分,但如果系统日志文件过大,则就需要考虑以更小的单位切分或者其他切分方式.下面就总结一下log4j常用的配置参数以及切分日志的不同方式. ...

  7. 【GTS】关于GtsTetheringTestCases模块的几个失败项

    GTS---关于GtsTetheringTestCases模块的几个失败项 1.run gts -m GtsTetheringTestCases -t com.google.android.tethe ...

  8. 【AndroidFramework】ATV9遥控器红外模式下,机顶盒在假待机阶段会响应遥控器语音键

    [问题描述] 测试部反馈,红外模式下,按power键进入假待机,按红外语音键会唤醒. 背景交代:红外语言键是我们自定义的按键,键值225.在红外模式下按会弹提示框"没连蓝牙,请连蓝牙使用语音 ...

  9. Java基础/阿里巴巴Java开发手册

    阿里巴巴Java开发手册 序号 文档名及下载地址 1 阿里巴巴Java开发手册v1.2.0 2 <阿里巴巴Java开发手册>(终极版) 为什么阿里巴巴禁止工程师直接使用日志系统(Log4j ...

  10. Postman—上个接口返回数据作为下个接口入参

    //将数据解析成json格式 var data=JSON.parse(responseBody); //获取totalRentPrice值 var totalRentPrice=jsonData.da ...