P4609 建筑师 Sol
首先显然可以确定一个最高的建筑,以此为中心,分成左半和右半。
同时可以认为,左半分为了 个段,右半为 。
然后可以将一个可以被看见的建筑理解为一个以其为开头的段。
那么这一段中以其为开头,其余的可以随便排序。
计算答案发现,假设某一段长度为 ,则排列方案数为 。
而一个大小为 的环,排列方案数也恰好为 。
则可以理解为将 个元素分为 个环。
那么答案就是这样,左边右边分一下,一个组合数,然后分一下环,乘起来。
答案即为 。
res
表示第一类斯特林数,c
表示组合数。
inline void init() {
res[0][0] = 1;
for (int j = 1; j <= 5e4; ++j)
for (int i = 1; i <= 2e2; ++i)
res[j][i] = (res[j-1][i-1] + (j - 1) * res[j-1][i]) % p;
for (int i = 0; i <= 2e2; ++i) c[0][i] = 1;
for (int i = 1; i <= 2e2; ++i)
for (int j = 1; j <= 2e2; ++j)
c[i][j] = (c[i-1][j-1] + c[i][j-1]) % p;
}
inline void query() {
cin >> n >> a >> b;
int ans = res[n-1][a+b-2] * c[a-1][a+b-2];
cout << ans % p << endl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现