[luoguP9823] The Journey of Geor Autumn
题意
给定 ,求满足
的排列 的数量。
sol
首先考虑 ,容易发现,当 位于 之后时,永远无法满足条件,因此必须要放到 的左侧,而当放置了 以后,右侧最小的数又会成为新的 "",因此会变为新的子任务。假设 被放在了 的位置,那么左侧方案数即为 ,设 表示长度为 的子任务,则
前缀和优化即可
代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 10000005, mod = 998244353;
int f[N], factor[N], inv[N];
int n, k;
int sum[N];
int qpow(int a, int k, int p){
int ans = 1;
while (k) {
if (k & 1) ans = (LL) ans * a % p;
a = (LL) a * a % p;
k >>= 1;
}
return ans;
}
int main(){
scanf("%d%d", &n, &k);
factor[0] = 1, sum[0] = 1;
for (int i = 1; i <= n; i ++ ) factor[i] = (LL) factor[i - 1] * i % mod;
inv[n] = qpow(factor[n], mod - 2, mod);
for (int i = n - 1; i >= 0; i -- ) inv[i] = (LL) inv[i + 1] * (i + 1) % mod;
for (int i = 1; i <= n; i ++ ){
f[i] = (f[i] + (LL) factor[i - 1] * ((sum[i - 1] - ((i - k - 1) < 0 ? 0 : sum[i - k - 1])) % mod + mod) % mod) % mod;
sum[i] = (sum[i - 1] + (LL) f[i] * inv[i] % mod) % mod;
}
printf("%d\n", f[n]);
}
分类:
题解 / 2025训练
标签:
DP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App