[CF632E]Thief in a Shop
2024-08-31 05:20:34
题目大意:有一个小偷,拿$k$个东西,有$n$种产品,每种产品都有无限多个。对于每个第$i$ 种产品,它的价值是$A_i$。可能偷走的物品价值之和。
题解:对于所有的物品构造生成函数$F(x)=\sum\limits_{i\in A}x^i$,取$k$个物品相当于取其中的$k$项相乘,输出$F^k(x)$中不为零的项就行了。(这道题模数$998244353$和$1004535809$都被$hack$了,看$Weng\_weijie\;dalao$的题解得双模数没被卡,于是就$A$了)(这道题似乎可以用$DP$,但我不怎么会)
卡点:无
C++ Code:
#include <cstdio>
#include <algorithm>
#define maxn 1 << 20 | 3
const int G = 3;
int mod, ans;
int lim, ilim, s, rev[maxn], Wn[maxn];
inline int pw(int base, long long p) {
base %= mod, p %= mod - 1;
int ans = 1;
for (; p; p >>= 1, base = 1ll * base * base % mod) if (p & 1) ans = 1ll * ans * base % mod;
return ans;
}
inline int Inv(int x) {
return pw(x, mod - 2);
}
inline void up(int &a, int b) {if ((a += b) >= mod) a -= mod;}
inline void NTT(int *A, int op) {
for (int i = 0; i < lim; i++) if (i < rev[i]) std::swap(A[i], A[rev[i]]);
for (int mid = 1; mid < lim; mid <<= 1) {
int t = lim / mid >> 1;
for (int i = 0; i < lim; i += mid << 1) {
for (int j = 0; j < mid; j++) {
int W = op ? Wn[t * j] : Wn[lim - t * j];
int X = A[i + j], Y = 1ll * A[i + j + mid] * W % mod;
up(A[i + j], Y), up(A[i + j + mid] = X, mod - Y);
}
}
}
if (!op) for (int i = 0; i < lim; i++) A[i] = 1ll * A[i] * ilim % mod;
}
inline void init(int n, int mod) {
::mod = mod;
lim = 1, s = -1; while (lim < n) lim <<= 1, s++; ilim = Inv(lim);
for (int i = 0; i < lim; i++) rev[i] = rev[i >> 1] >> 1 | (i & 1) << s;
int W = pw(G, (mod - 1) / lim);
Wn[0] = 1; for (int i = 1; i <= lim; i++) Wn[i] = 1ll * Wn[i - 1] * W % mod;
}
int n, k;
int a[maxn], b[maxn];
int main() {
scanf("%d%d", &n, &k);
for (int i = 0, tmp; i < n; i++) scanf("%d", &tmp), a[tmp] = b[tmp] = 1;
init(1 << 20, 998244353);
NTT(a, 1);
for (int i = 0; i < lim; i++) a[i] = pw(a[i], k);
NTT(a, 0);
init(1 << 20, 1004535809);
NTT(b, 1);
for (int i = 0; i < lim; i++) b[i] = pw(b[i], k);
NTT(b, 0);
for (int i = 0; i < lim; i++) if (a[i] | b[i]) printf("%d ", i);
return 0;
}
最新文章
- 【译】Unity3D Shader 新手教程(5/6) &mdash;&mdash; Bumped Diffuse Shader
- BZOJ 3196 Tyvj 1730 二逼平衡树 ——树状数组套主席树
- Linux SVN 命令详解(zz)
- maven-腾讯SDK(QQ)接口java引入pom配置
- startDiscovery() and startLeScan().
- sql快捷键
- [ZOJ 3623] Battle Ships
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(41)-组织架构
- asp.net mvc生命周期学习
- PHP: 深入pack/unpack <;转>; [链接]
- if判断 -z -n 参数
- Java进阶(三十二) HttpClient使用详解
- 关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别
- Internet Explorer 10 administration IE10管理
- django ORM聚合函数
- Kubernetes(k8s)入门、单机版安装、kuberctl指令、k8s服务实例
- (转)先装VS后装IIS产生问题的解决办法
- idea 设置编译的编码方式
- 使用Maven部署构件至私服
- 学习Web Service、wcf、webapi的区别