[数学记录]abc276G Count Sequences
题意:对满足以下条件的序列计数,膜 :
这题的难点在于发现它是简单题。
想了一上午生成函数啊(
不等于很难处理,所以做一遍差分,令 自增 ,题意转化为: 且 对 成立。
然后就会发现等价于求 ,然后怎么算呢,我也不会啊hh
首先,数字的个数是一定的,这意味着其实可以只关注膜 余数。
为了处理回剩余数,应把多于的 分配到剩下数。
能发现中间的数的取值只有 ,这意味着枚举几个 是完全可接受的。
此时同时枚举第一个数,最后一个数便会随之确定。
做完了。这是黄?我不信。
#include <cstdio>
using namespace std;
const int M = 1e7+5, mod = 998244353;
int qpow(int a, int b){
long long ans = 1ll;
for(; b; b >>= 1) {if(b & 1) ans = 1ll * ans * a % mod; a = 1ll * a * a % mod;}
return ans;
}
int inv(int k) {return qpow(k, mod - 2);}
int addd(int a, int b) {a += b; return a > mod ? a-mod : a;}
int minus(int a, int b) {a -= b; return a < 0 ? a+mod : a;}
void add(int &x, int y) {x += y; if(x > mod) x -= mod;}
int fact(int x) {int ans = 1; for(int i = 1; i <= x; i++) ans = 1ll * ans * i % mod; return ans;}
int fac[M], invfac[M], invn[M];
void pre(int n = M - 3){
fac[0] = invfac[0] = fac[1] = invfac[1] = invn[1] = 1;
for(int i = 2; i <= n; i++)
invn[i] = 1ll * (mod - mod/i) * invn[mod%i] % mod,
fac[i] = 1ll * fac[i-1] * i % mod,
invfac[i] = 1ll * invfac[i-1] * invn[i] % mod;
}
int C(int n, int m) {return m > n ? 0 : 1ll * fac[n] * invfac[m] % mod * invfac[n-m] % mod;}
int n, m, ans;
int main(){
pre(); scanf("%d %d", &n, &m);
++n;
for(int i = 0; i <= n-2; i++) {
int j = n - 2 - i;
for(int s = 0; s < 3; s++) {
int t = (m - 2*i - j - s) % 3;
if(t < 0) continue;
int res = m - 2*i - j - t - s; res /= 3;
add(ans, 1ll * C(n-2, i) * C(res + n - 1, n - 1) % mod);
}
}
printf("%d\n", ans);
}
upd 11/13
在 Luogu 上看到 一个生成函数题解,最后的式子也化到了自己卡住那步,把后面的来补全一下。
要求的即为
相当于对前面的东西弄个二维前缀和,而
先把两者中的一者卷个 再和另一者卷起来即可,因为只需要一项,不需要 NTT,总时间复杂度线性。
作者:purplevine
出处:https://www.cnblogs.com/purplevine/p/16867616.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
本文来自博客园,作者:purplevine,转载请注明原文链接:https://www.cnblogs.com/purplevine/p/16867616.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?