2022 牛客多校 第四场 C - Easy Counting Problem
题意
给定
思路
显然, 对于每个数的出现次数, 以串长作为生成函数的指数, 有
(
考虑到这里的
上面式子的
上式表示, 对每个数
显然枚举到
其中, 记
计算各个
其中,
代码
代码中本来想滚动优化幂次值, 结果发现发现直接预处理
constexpr int N = 10000010;
constexpr int sq = 4096;
void sol() {
int w;
std::cin >> w;
std::vector<int> c(w);
for(int i=0;i<w;++i) {
std::cin >> c[i];
}
std::vector<int> fac(N + 1, 1), ifac(N + 1, 1);
for(int i=2;i<=N;++i) {
fac[i] = mul(fac[i - 1], i);
}
ifac[N] = Poly::power(fac[N], MOD - 2);
for(int i=N-1;i>=2;--i) {
ifac[i] = mul(ifac[i + 1], i + 1);
}
std::vector<poly> a(1 << w), d(w + 1);
for(int T = 0; T < w; ++T) {
int t = 1 << T;
a[t].resize(c[T]);
for(int i = 0; i < c[T]; ++i) {
a[t][i] = add(0, MOD - ifac[i]);
}
}
a[0] = poly(1, 1);
for(int dp=0;dp<1<<w;++dp) {
for(int j=0;j<w;++j)
if((dp & 1 << j) == 0 && a[dp | 1 << j].empty()) {
a[dp | 1 << j] = Poly::mul(a[dp], a[1 << j]);
}
}
for(int dp=0;dp<1<<w;++dp) {
int cto = 0;
for(int tmp = dp; tmp; tmp >>= 1) if(tmp&1) ++cto;
int ctz = w - cto;
d[ctz].resize(std::max(a[dp].size(), d[ctz].size()));
for(int i=0;i<a[dp].size();++i) d[ctz][i] = add(d[ctz][i], a[dp][i]);
poly().swap(a[dp]);
}
int Q;
std::cin >> Q;
std::vector<int> q(Q),pos(Q);
for(int i=0;i<Q;++i) {
std::cin >> q[i];
}
std::iota(pos.begin(), pos.end(), 0);
std::sort(pos.begin(), pos.end(), [&](int x,int y) {return q[x] > q[y];});
std::vector<std::vector<std::array<int,2>>> tb(w + 1, std::vector<std::array<int,2>>(sq));
for(int i=0;i<sq;++i) tb[1][i][0] = tb[1][i][1] = 1;
for(int t=2;t<=w;++t) {
int qwq = Poly::power(t, sq);
tb[t][0][0] = tb[t][0][1] = 1;
for(int i=1;i<sq;++i) {
tb[t][i][0] = mul(tb[t][i - 1][0], t);
tb[t][i][1] = mul(tb[t][i - 1][1], qwq);
}
}
for(int I=0;I<Q;++I) {
int n = q[pos[I]];
int res = 0;
if(n < (int)d[0].size()) res = add(res, d[0][n]);
for(int t=1;t<=w;++t) {
int m = (int)d[t].size();
for(int i=0;i<m&&i<=n;++i) {
res = add(res, mul(mul(ifac[n - i], mul(tb[t][(n - i) % sq][0], tb[t][(n - i) / sq][1])), d[t][i]));
}
}
q[pos[I]] = mul(res, fac[n]);
}
for(int e : q) {
std::cout << e << '\n';
}
}
Living with bustle, hearing of isolation.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?