首页 > 其他分享 >「解题报告」ARC132E Paw

「解题报告」ARC132E Paw

时间:2023-03-15 20:23:15浏览次数:40  
标签:ARC132E Paw int inv times 1ll 解题 MAXN ans

好简单的题,但是我没想到咋做,我一上来就想把贡献拆开,然后推出了一个根本无法化简的式子,哈哈。

仔细考虑一下,发现最后的形式一定是有一段没有被覆盖过,其它的都覆盖过,即形如 <<<<<<<=======>>>>>>>>

那么可以枚举不变的一段,然后计算让这一段不变的概率。考虑左右是独立的,可以先计算两边的方案数,然后组合数合起来,最后一块算概率。

考虑左边。我们每次删一个点,要不然就是删最右边的点,此时这个点必须向左;要不然就是删左边的点,此时方向任意。那么实际上方案数就是 \(1 \times 3 \times 5 \times \cdots \times (2k-1)\)。预处理一下即可。

然后做完了,非常简单。

嘿嘿,爪爪,嘿嘿

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005, P = 998244353;
int n;
char s[MAXN];
int fac[MAXN], inv[MAXN];
int qpow(int a, int b) {
    int ans = 1;
    while (b) {
        if (b & 1) ans = 1ll * ans * a % P;
        a = 1ll * a * a % P;
        b >>= 1;
    }
    return ans;
}
void pre(int n) {
    fac[0] = 1;
    for (int i = 1; i <= n; i++) {
        fac[i] = 1ll * fac[i - 1] * i % P;
    }
    inv[n] = qpow(fac[n], P - 2);
    for (int i = n; i >= 1; i--) {
        inv[i - 1] = 1ll * inv[i] * i % P;
    }
}
int C(int n, int m) {
    if (n < 0 || m < 0 || n < m) return 0;
    return 1ll * fac[n] * inv[m] % P * inv[n - m] % P;
}
int f[MAXN];
int main() {
    scanf("%d%s", &n, s + 1);
    pre(2 * n);
    vector<int> pos = { 0 };
    for (int i = 1; i <= n; i++) {
        if (s[i] == '.') {
            pos.push_back(i);
        }
    }
    pos.push_back(n + 1);
    int m = pos.size() - 2;
    int tot = 1, ans = 0;
    for (int i = 2; i <= 2 * m; i += 2) {
        tot = 1ll * i * tot % P;
    }
    f[0] = 1;
    for (int i = 1; i <= n; i++) {
        f[i] = 1ll * f[i - 1] * (2 * i - 1) % P;
    }
    for (int i = 0; i < pos.size() - 1; i++) {
        int l = pos[i] + 1, r = pos[i + 1] - 1;
        int cnt = l - 1;
        for (int j = l; j <= r; j++) {
            if (s[j] == '<') cnt++;
        }
        ans = (ans + 1ll * C(m, i) * f[i] % P * f[m - i] % P * cnt) % P;
    }
    ans = 1ll * ans * qpow(tot, P - 2) % P;
    printf("%d\n", ans);
    return 0;
}

标签:ARC132E,Paw,int,inv,times,1ll,解题,MAXN,ans
From: https://www.cnblogs.com/apjifengc/p/17219838.html

相关文章

  • 「解题报告」ARC154F Dice Game
    看起来就多项式,跟概率有关就上概率生成函数吧。考虑类似于FlipCells的套路,设\(F(x)\)为翻出所有的生成函数,\(G(x)\)为第一次翻出所有的生成函数,\(H(x)\)是翻出后任......
  • Vjudge 3.14 训练解题报告
    比赛传送门\(\color{white}{password:3.1415926}\)A.Fibonacci-ish题意:定义一个序列为“Fibonacci-ish”的,当且仅当对任意\(2<i\len,a_i=a_{i-1}+a_{i-2}\)。给定......
  • # 92 -「java 」 100-执行速度 - 三步『截取子链表- 递归反转- 拼接』 解题的实现思路
    Tags中等递归链表java 题目链接:92.反转链表II 解题思路[截取子链表+反转+拼接]:以1->2->3->4->5,m=2,n=4为例:【截取】定位到需要反......
  • 剑指 Offer 68 - II. 二叉树的最近公共祖先(java解题)
    (剑指Offer68-II.二叉树的最近公共祖先(java解题))1.题目给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T......
  • CF1804 解题笔记
    赛时战况,血压飙升,成功跳崖!A随便算一下就好了。#include<bits/stdc++.h>#defineILinline#defineregregisterILintread(){regintx=0;regcharch=get......
  • 「解题报告」ARC158D Equation
    好神仙的题。考虑形如\(F(x,y,z)=x^i+y^i+z^i\)的函数有一个性质:\(F(tx,ty,tz)=t^iF(x,y,z)\)。原式要求\((x+y+z)(x^n+y^n+z^n)(x^{2n}+y^{2n}+z^{2n......
  • [省选联考 2021] 解题报告
    这两天(2023-3-12/13)开了一场省选VP,感触比较大,同时也有颇多要总结的地方,因此写下这篇博客。省选\(-20\)多天,我还在补一些没有仔细学的新算法,虽然感觉新学了很多东西,但是......
  • 「解题报告」ARC134E Modulo Nim
    真的不想写这题,感觉这种题出的很怪。但是今天模拟赛出了,所以我还是写一下吧。首先我们只关心当前所有数的集合,有多少我们不关心。设这个集合为\(S\)。观察样例,感觉可以......
  • 「解题报告」CF1444D Rectangular Polyline
    这类型的题我们可以先找一些显然的必要条件,然后再去构造,很有可能就发现它是充分条件。考虑有什么必要条件:首先\(n=m\),要不然无法横纵首尾相连。其次所有横必定能划分......
  • 「解题报告」CF1067E Random Forest Rank
    感觉非常强大。求秩不好考虑,容易想到求行列式。如果行列式不等于\(0\)说明满秩。先考虑树邻接矩阵的行列式:行列式的定义式即枚举一个排列。排列可以划分成若干个置换环......