ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

stack(计蒜客信息学 8 月提高组模拟赛)

2022-08-20 19:02:07  阅读:147  来源: 互联网

标签:信息学 const int inv 1ll return 计蒜客 stack 998244353


C.stack

原题链接

本问题是使用栈跳出开头是1的操作序列方案数

考虑⼀个合法的输出时如何产生的,因为开头必须为1,先指定开头的元素,将这个元素前面的元素都先放⼊栈中。

把问题转化成一个栈中已经存在一定元素求出栈序列个数。假设这个元素为第i个,那么1~i-1在栈中,1+i~n在队列中。就是转化为经典的卡特兰数

答案为

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 1e6 + 10;
 4 const int mod = 998244353;
 5 int n, f[maxn];
 6 int fac[maxn<<1],inv[maxn<<1];
 7 int qmi(int a, int b, int m) {
 8     a %= m;
 9     if (!a)return 0;
10     int result = 1;
11     for (; b; a = 1ll * a * a % m, b >>= 1)
12         if (b& 1)result = 1ll * result * a % m;
13     return result;
14 }
15 int C(const int n, const int m) {
16     if (n < m)return 0;
17     return 1ll * fac[n] * inv[m] % 998244353 * inv[n - m] % 998244353;
18 }
19 int cal(int a, int b) {
20     return(1ll * C(a + 2 * b, b) - C(a + 2 * b, b - 1) + 998244353) % 998244353;
21 }
22 void init(const int n) {
23     fac[0] = 1;
24     for (int i = 1; i <= n; i++)fac[i]=1ll*fac[i-1]*i%998244353;
25     inv[n] = qmi(fac[n], 998244353 - 2, 998244353);
26     for (int i = n - 1; i >= 0; i--)
27         inv[i] = inv[i + 1] * (i + 1ll) % 998244353;
28 }
29 int main() {
30     freopen("stack.in", "r", stdin);
31     freopen("stack.out", "w", stdout);
32     scanf("%d", &n);
33     init(n << 1);
34     for (int i = 1; i <= n; i++)scanf("%d", &f[i]);
35     int ans = 0;
36     for (int i = 1; i <= n; i++)
37         if (f[i])ans=(ans+cal(i-1,n-i))%998244353;
38     cout<<ans<<endl;
39     return 0;
40 }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:信息学,const,int,inv,1ll,return,计蒜客,stack,998244353
来源: https://www.cnblogs.com/nancychai/p/16608347.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有