2024.2.17 鲜花
机关 题解
MARENOL
要是放这个歌机房会有人能欣赏吗???
来自b站视频av35346701下的评论
应该是 LeaF 本人自己写的
侵删
感觉不是难题。
题目中的
容易发现,
在
考虑求出
考虑计数,设
于是方程就是:
注意到
上个前缀和就可以
先给一组固定的起点和终点,设
将其推平,最高位是不能水平向右转移的,加一条线表示永不碰到,于是就变成了:
直接卡特兰数即可,一点小问题是因为最后一行的竖线存在,答案事实上求了前缀和,可以用
Code
/* Local File in_out/in.in in_out/out.out */ #include <bits/stdc++.h> using namespace std; using llt = long long; using ull = unsigned long long; using llf = long double; #define endl '\n' #ifndef LOCAL #undef assert #define assert 0 && #define cerr 0 && cerr FILE *InFile = freopen("game.in", "r", stdin), *OutFile = freopen("game.out", "w", stdout); #endif const int N = 5e5 + 3, M = N * 2 - 3; int n, m, MOD, ans = 0; int aas, fac[M], ivf[M]; int Fpw(int a, int b){ if(b < 0) return 1; int ans = 1; while(b){ if(b & 1) ans = 1ll * ans * a % MOD; a = 1ll * a * a % MOD, b >>= 1; } return ans; } int C(int a, int b){ return a < b ? 0 : 1ll * fac[a] * ivf[b] % MOD * ivf[a - b] % MOD; } int P(int a, int b, int c, int d){ int l = c - a, r = d - b; return C(l + r, l); } int Cat(int a, int b, int c, int d){ return (1ll * P(a, d, c, b) - P(a, b - c + 2, n + 2 - d, b)) % MOD; } int main(){ ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr); cin >> n >> m >> MOD; if(n == 1) return cout << 1, 0; fac[0] = 1; for(int i = 1; i <= M - 3; ++i) fac[i] = 1ll * fac[i - 1] * i % MOD; ivf[M - 3] = Fpw(fac[M - 3], MOD - 2); for(int i = M - 3; i; --i) ivf[i - 1] = 1ll * ivf[i] * i % MOD; cout << ((1ll * Cat(0, n, m, 2) - Cat(0, n, m, 3)) % MOD * Fpw(2, n - m - 1) % MOD + MOD) % MOD; }
P
本文来自博客园,作者:5k_sync_closer,转载请注明原文链接:https://www.cnblogs.com/xrlong/p/18720687
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2024-02-17 2024初三集训模拟测试1