首页 > 其他分享 >Luogu P8007

Luogu P8007

时间:2023-04-24 20:25:20浏览次数:49  
标签:配对 相等 Luogu P8007 括号 左右 序列 数目

Upd.2022.2.3 代码写的太烂,删了(

题目传送门

这题如果不仔细分析的话,很容易被当成DP白白浪费很多时间(就像我)。

首先根据题意,可以认为左右括号是一种相互“抵消”的关系:

对于每个左括号,它右面总要有且仅有一个对应的右括号与其配对,才能使其成为一个合法括号序列。

在已知序列不无限循环的时候,为了使一个序列为合法括号序列,我们需要保证的条件有:

  1. 左右括号数目相等。
  2. 每个右括号出现时,必须保证它左边有可以和它配对的左括号。

如果还是不理解,可以看下代码:

bool check(){
    int l=0;//统计左右括号之差
    for(int i=1;i<=n;i++){
        if(s[i]=='(')l++;
        else{
            if(l==0)return 0;//保证右括号左边有可以和它配对的左括号
            else l--;
        }
    }
    return l==0;//保证左右括号数目相等
}

但是在无限循环的情况下,我们只需要保证左右括号相等即可,证明如下:

首先如果不相等,它一定不是合法括号序列,因为这样即使无限循环下去,也一定存在无法配对的括号,这是显然的。

在左右括号相等时,序列不合法的情况只有一个:即当一个右括号出现时,左边所有左括号都配对完了,没有剩下和它配对的了,例如 (()())))((

由于左右括号数目相等,无法配对的右括号一定和无法配对的左括号数目相等。

那么,如果将无法配对的右括号都搬到无法配对的左括号右边,这个序列就一定是一个合法括号序列了

比如,对于 (()())))(( ,我们如果将 (()()))) 都搬到序列右边,使无法配对的右括号和无法配对的左括号配上对,得到的 (((()()))) 就一定是一个合法括号序列。

而题目中的“无限循环”正帮我们实现了这个“搬”的过程。

证毕。

那么这题的任务就变成了“求出所有问号的填法中能使左右括号数目相等的方案数 \(\bmod\, 998244353\) 的值”。

由于左右括号数目之和等于 \(n\) 且左右括号数目相等,左右括号的数目一定都等于 \(\frac n 2\),同时如果 \(n\) 是奇数一定无法满足条件。

令已知的左括号数目为 \(l\),问号数目为 \(q\),求的就是在所有问号中填入 \(\frac n 2-l\) 个左括号的方案数,即 \(\binom{q}{\frac n 2-l}\)。

那么剩下的就是老生常谈的求组合数了,由于 \(998244353\) 是个质数,利用费马小定理求逆元就可以了。

代码太丑,略了。

标签:配对,相等,Luogu,P8007,括号,左右,序列,数目
From: https://www.cnblogs.com/untitled0/p/luogu-P8007.html

相关文章

  • Luogu P8496
    题面场外菜鸡whker听说你谷添加国赛新题立刻前来围观首先我们看到本题对于众数的定义,很容易想到通过权值线段树求解。(类似这题,但本题不需要可持久化)对于一个序列,我们维护一个deque和一个动态开点权值线段树。deque表示序列本身,线段树每个节点记录值在\([l,r]\)中的元素......
  • Luogu P3336
    因为我也是看了大佬的题解才写的(第一问),自认为自己讲得不可能比他们再好了,但是因为好多第二问的题解都被hack了,所以这里详细讲一下第二问的正确做法。初中平几课堂开课啦其实思路很简单,利用贪心的思想,能往上走就往上走,能走多高就走多高,来看这个图:点\(A\)是当前点,点\(B\)是......
  • Luogu P1999
    题目传送门初中数学老师在平面几何的第一节课就和我们说过:点动成线,线动成面,面动成体。即,由\(i-1\)维元素变化到\(i\)维的过程,就可以认为是将\(i-1\)维物体沿第\(i\)个方向平移的过程。因此我们考虑一个二维的正方形平移得到三维的正方体的过程:如果我们以平面的个......
  • Luogu_P1613 跑路 题解
    发现和最短路差不多,不过不能朴素的跑最短路。考虑对于每两个相隔\(2\)的整数次幂的点建边,在这个新图上跑最短路就是答案。设\(f_{i,j,k}\)表示从点\(i\)跳\(2^k\)步能否到点\(j\),转移方程就是一个普通的倍增。如果点\(i\)和点\(j\)可以一步到达,那么就在新图上建一条......
  • luogu P3308 [SDOI2014]LIS
    题面传送门涨知识了,第一次知道网络流删边不用全图重跑。首先我们先跑一个暴力dp,出\(f_i\)表示以\(i\)结尾的最长上升子序列长度。然后我们将其按照这个dp值分层,相......
  • 【NOIP2015】【Luogu2615】神奇的幻方(模拟填数)
    problem给一定n*n的矩阵,要求填上1~n*n的数,使之每行、列、对角线的和都相等。n为奇数时,按如下步骤构建:1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右......
  • luogu P7520 [省选联考 2021 A 卷] 支配
    题面传送门自己瞎胡的支配树,可能是错的(大雾首先我们可以证明,支配关系成树。考虑一个点\(x\)的两个受支配点\(y,z\),这两个点应该在一条路径上,如果\(y,z\)之间没有支......
  • luogu P9120 [春季测试 2023] 密码锁
    题面传送门题目中明摆着让你对\(k\)不同的情况讨论,并且难度应该是递增的。Section1:\(k=1\)应该不用我教你怎么做吧Section2:\(k=2\)最大值最小下意识二分转化成判......
  • luogu P7599 [APIO2021] 雨林跳跃
    题面传送门我成功了,我不再是以前那个我了!我们发现部分分里面有个单点跳到单点,尝试考虑这个部分分。一个点有两个点可以跳,贪心地想,如果我先跳了比较矮的那个,那么再一步能......
  • luogu P4566 [CTSC2018]青蕈领主
    题面传送门最后这个转化非常牛逼啊!首先我们可以证明:一个合法的序列中,这样的极长连续区间不会相交。Proof:如果相交了,说明相交的区间也是一段连续区间,而每个区间不相交的......