传送门

Sol

对于每个 \(i\) ,可以把 \(k\) 个数字分成 \((x,i-x)\) 的若干组。

那么就是求每组只能其中选择一个且可以重复的方案数。

预处理 \(f[i][j]\) 表示从 \(j\) 个组内选 \(i\) 个,每个组必须选的方案数。

\(f[i][j]=(f[i-1][j]+f[i-1][j-1]\times 2)\) 注意组有序,而选出来是无序的,所以要强制选择最后一组

那么每个组可以不选的方案数 \(g[i][j]\) 就是

\[g[i][j]=\sum_{t=0}^{j}(^{j}_{t})f[i][t]
\]

拆开组合数可以 \(NTT\) 优化。

对于询问分两种情况

  1. \(i\) 为奇数

    那么 \(x\ne i-x\) 直接枚举多少个选组内的,其它的可重组合即可
  2. \(i\) 为偶数

    存在一组 \(x=i-x\) 枚举是否选 \(x\) (因为只能选一个),然后像奇数一样做即可

    \(\Theta(n^2logn)\) 丝毫不虚
# include <bits/stdc++.h>
using namespace std;
typedef long long ll; namespace IO {
const int maxn((1 << 21) + 1); char ibuf[maxn], *iS, *iT, c;
int f; inline char Getc() {
return iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, maxn, stdin), iS == iT ? EOF : *iS++) : *iS++;
} template <class Int> inline void In(Int &x) {
for (f = 1, c = Getc(); c < '0' || c > '9'; c = Getc()) f = c == '-' ? -1 : 1;
for (x = 0; c >= '0' && c <= '9'; c = Getc()) x = (x << 1) + (x << 3) + (c ^ 48);
x *= f;
}
} using IO :: In; const int maxn(4005);
const int mod(998244353); int f[maxn][maxn], c[maxn][maxn], fac[maxn], ifac[maxn]; inline void Inc(int &x, int y) {
x += y;
if (x >= mod) x -= mod;
} inline int Pow(ll x, int y) {
ll ret = 1;
for (; y; y >>= 1, x = x * x % mod)
if (y & 1) ret = ret * x % mod;
return ret;
} inline int Calc(int n, int num, int res) {
int ret = 0;
if (!res) ret = f[n][num];
else {
for (int j = 0; j <= n; ++j)
Inc(ret, 1LL * f[n - j][num] * c[j + res - 1][j] % mod);
}
return ret;
} int a[maxn << 2], b[maxn << 2], len, l, r[maxn << 2], w[2][maxn << 2]; inline void NTT(int *p, int opt) {
for (int i = 0; i < len; ++i) if (i < r[i]) swap(p[i], p[r[i]]);
for (int i = 1; i < len; i <<= 1)
for (int j = 0, t = i << 1; j < len; j += t)
for (int k = 0; k < i; ++k) {
int nw = w[opt == -1 ? 1 : 0][len / i * k];
int x = p[j + k], y = 1LL * p[j + k + i] * nw % mod;
p[j + k] = (x + y) % mod, p[j + k + i] = (x - y + mod) % mod;
}
if (opt == -1) {
int inv = Pow(len, mod - 2);
for (int i = 0; i < len; ++i) p[i] = 1LL * p[i] * inv % mod;
}
} inline void Init() {
f[0][0] = c[0][0] = ifac[0] = fac[0] = 1;
for (int i = 1, j; i <= 4000; ++i)
for (c[i][0] = j = 1; j <= i; ++j)
c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
for (int i = 1; i <= 2000; ++i)
for (int j = 1; j <= 2000; ++j)
f[i][j] = (f[i - 1][j] + 1LL * f[i - 1][j - 1] * 2 % mod) % mod;
for (int i = 1; i <= 2000; ++i) fac[i] = 1LL * fac[i - 1] * i % mod;
ifac[2000] = Pow(fac[2000], mod - 2);
for (int i = 1999; i; --i) ifac[i] = 1LL * ifac[i + 1] * (i + 1) % mod;
for (len = 1; len <= 4000; len <<= 1) ++l;
for (int i = 0; i < len; ++i) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1));
for (int i = 1; i < len; i <<= 1) {
int wn = Pow(3, (mod - 1) / (i << 1));
for (int nw = 1, k = 0; k < i; ++k, nw = 1LL * nw * wn % mod)
w[0][len / i * k] = nw, w[1][len / i * k] = Pow(nw, mod - 2);
}
for (int i = 0; i <= 2000; ++i) {
for (int j = 0; j < len; ++j) a[j] = b[j] = 0;
for (int j = 0; j <= 2000; ++j) a[j] = ifac[j], b[j] = 1LL * ifac[j] * f[i][j] % mod;
NTT(a, 1), NTT(b, 1);
for (int j = 0; j < len; ++j) a[j] = 1LL * a[j] * b[j] % mod;
NTT(a, -1);
for (int j = 0; j <= 2000; ++j) f[i][j] = 1LL * a[j] * fac[j] % mod;
}
} int n, k; int main() {
In(k), In(n), Init();
int r = k << 1;
for (int i = 2; i <= r; ++i) {
if (i & 1) {
int num = max(0, min(i >> 1, i - 1) - max(1, i - k) + 1);
int res = k - (num << 1);
printf("%d\n", Calc(n, num, res));
}
else {
int num = max(0, min(i >> 1, i - 1) - max(1, i - k) + 1);
int res = k - (num << 1) + 1;
if (num) --num;
printf("%d\n", (Calc(n, num, res) + Calc(n - 1, num, res)) % mod);
}
}
return 0;
}

ARG102E:Stop. Otherwise...的更多相关文章

  1. java web 开发三剑客 -------电子书

    Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知In ...

  2. 所有selenium相关的库

    通过爬虫 获取 官方文档库 如果想获取 相应的库 修改对应配置即可 代码如下 from urllib.parse import urljoin import requests from lxml im ...

  3. In-Memory:内存数据库

    在逝去的2016后半年,由于项目需要支持数据的快速更新和多用户的高并发负载,我试水SQL Server 2016的In-Memory OLTP,创建内存数据库实现项目的负载需求,现在项目接近尾声,系统 ...

  4. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  5. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  7. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  8. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  9. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

随机推荐

  1. struts2_maven_learning

    以下为学习maven struts2 的学习过程,现记录如下. 1.创建一个完善的maven程序 maven:(jar) 1)maven project 2)facet 3)pom.xml,depen ...

  2. Linux服务-openssh

    目录 1. 使用 SSH 访问远程命令行 1.1 OpenSSH 简介 1.2 SSH 版本 1.3 SSH 认证方式 1.4 openSSH 的工作模式 1.5 Secure Shell 示例 1. ...

  3. 2017-2018-1 20155232 嵌入式C语言——时钟

    2017-2018-1 20155232 嵌入式C语言--时钟 任务: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清 ...

  4. # 20155337《网络对抗》Web基础

    20155337<网络对抗>Exp8 Web基础 实践目标 1. 实践内容 (1).Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写 ...

  5. pandas:根据行间差值进行数据合并

    1. 问题描述 在处理用户上网数据时,用户的上网行为数据之间存在时间间隔,按照实际情况,若时间间隔小于阈值(next_access_time_app),则可把这几条上网行为合并为一条行为数据:若时间间 ...

  6. linux下如何解除被占用的端口号

    在本例中,假设8080端口被占用. 1.查看8080端口是否被占用: netstat -anp | grep 8080输出结果:tcp        0      0 :::8080         ...

  7. Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理

    这篇文章我们来学习如何使用 Spring Boot 集成 Apache Shiro .安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在 Java 领域一般有 Spring S ...

  8. Window下mysql环境配置问题整理

    Window下mysql环境配置问题整理 参考如下链接. 无需安装解压版mysql包 创建选项配置 首次启动服务 用mysqld初始化目录 安装后设置和测试 启动服务错误信息 管理员模式打开cmd m ...

  9. C# Language Specification 5.0 (翻译)第三章 基本概念

    应用程序启动 拥有进入点(entry point)的程序集称应用程序(application).当运行一应用程序时,将创建一新应用程序域(application domain).同一个应用程序可在同一 ...

  10. centos6 和centos7 安装git 的区别

    centos6 和centos7 安装git 的区别 centos6安装git yum install curl-devel expat-devel gettext-devel openssl-dev ...