首页 > 其他分享 >【AtCoder】Forbidden Pattern

【AtCoder】Forbidden Pattern

时间:2023-04-27 19:11:08浏览次数:51  
标签:AtCoder 被删 .. Pattern Forbidden texttt XX 去掉 2i

题目链接

分析

首先考虑哪些串能被删空。下面只考虑长度为偶数的串。考虑这样一个(错误的)算法:从左往右依次加入串中的字符,然后能删则删。这个算法对于结尾为 A 的串一定能删空。对称地,开头为 B 的串也一定能被删空。

现在只需要考虑开头为 A 结尾为 B 的串。如果它能被删空,则一定存在最早的一个时刻,使得串的开头为 B 或结尾为 A。考虑把串表示成 A XX .. XX B 的形式,若某个 XXAB 则肯定可以从开头/结尾一路删到它。

因此,如果能匹配下列模式串中至少一个,一个串就能被删空:

B XX XX .. X
X AB XX .. X
..
X XX .. AB X
X XX XX .. A

对于其它情况,每次删除可以等效于删除一个 XX,因此可以归纳出不能删空。

通过观察可以得到一个等价的条件:一个串能被删空,当且仅当它能被划分成若干个长为偶数的串,每个串的开头为 B 或结尾为 A。

接下来,我们可以考虑串 \(S\) 能否进行若干次删除得到 \(T\)。

如果 \(T_1=\texttt{A}\),则可以找到 \(S\) 中的第一个位置 \(i\) 满足:

  • \(S_i=\texttt{A}\)
  • \(S_{1..i-1}\) 能被删空

然后去掉 \(S_{1..i}\) 和 \(T_1\),继续做。

考虑反证,假设去掉之后不合法,而某个合法方案去掉的是 \(S_{1..j}\) (\(j>i\))。那么两种方案得到的 \(S\) 分别为:

XX .. XA XX ..
         XX ..

假设第二个串的某个前缀能被删空,那么第一个串右端点相同的前缀必然能被删空,矛盾。

如果 \(T_1=\texttt{B}\) 且 \(S_1=\texttt{A}\),则可以找到最小的 \(2i\) 满足 \(S_{2i}=\texttt{A}\),先删除 \(S_{1..2i}\)(通过上述的一个串被删空的等价条件得到)。

假设现在 \(S_1=\texttt{B}\)。如果 \(T_{1..2}=\texttt{BA}\),可以找到最小的 \(2i\) 满足 \(S_{2i}=\texttt{A}\),去掉 \(S_{1..2i}\) 和 \(T_{1..2}\)。这一定合法,且 \(\texttt{A}\) 的位置一定最靠左。

现在只剩 \(T_{1..2}=\texttt{BB}\) 的情况,我们找到最小的 \(2i\) 满足 \(S_{2i}=\texttt{B}\),去掉 \(S_{1..2i-1}\) 和 \(T_1\)。根据上述的一个串被删空的等价条件,我们实际想要去掉 \(T_1\) 以及 \(S\) 中由如下三段字符串拼成的一个前缀:

  • 一段能被删空的串
  • B
  • 一段能被删空的串

满足 \(S\) 删掉这个前缀之后开头为 B。那么能观察到这个删法是最短的。

标签:AtCoder,被删,..,Pattern,Forbidden,texttt,XX,去掉,2i
From: https://www.cnblogs.com/alfalfa-w/p/17359992.html

相关文章

  • AtCoder Regular Contest 112 F Die Siedler
    洛谷传送门AtCoder传送门感觉太人类智慧了。设\(A=(c_1,c_2,...,c_n)\)表示当前每种牌的数量,\(f(A)\)为状态\(A\)只进行换牌操作最终最少剩下几张牌。\(f(A)\)是可以贪心求出的,因为策略必然是能换则换。并且我们发现依次换\(2,3,...,n,1\),最后\(c_2\simc_n\)都......
  • AtCoder Regular Contest 123 C 1, 2, 3 - Decomposition
    洛谷传送门AtCoder传送门从低位往高位考虑。设当前个位为\(k\),暴力搜索这一位向上进\(i\)位,设\(\left\lfloor\frac{n}{10}\right\rfloor-i\)的答案为\(t\)。若\(t>10i+k\)显然就不可行,因为就算个位全部填\(1\)也不能补齐;否则\(n\)的答案就是\(\max(t,\l......
  • AtCoder Regular Contest 120 F Wine Thief
    洛谷传送门AtCoder传送门Hint如果是一个环怎么做?Answer由于是一个环,因此环上每个点对最终答案造成的贡献都相同。设$f_{i,j}$为长度为$i$的序列选$j$个不相邻的点的方案数,则$f_{i,j}=\binom{i-j+1}{j}$。应该很好理解,考虑一个长度为$i-j+1$的链,链头、链尾和两......
  • 设计模式(18)-Command Pattern
    一、 命令(Command)模式命令(Command)模式属于对象的行为模式【GOF95】。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。......
  • AtCoder Regular Contest 125 E Snack
    洛谷传送门AtCoder传送门很棒的flow题,考虑建二分图。源点向每种零食连边权为\(a_i\)的边,每种零食向每个孩子连边权为\(b_j\)的边,每个孩子向汇点连边权为\(c_j\)的边,这个图的最大流就是答案。直接跑最大流肯定T,考虑最大流等价于求这个图的最小割,因此转而求最小割。......
  • AtCoder Regular Contest 126 D Pure Straight
    洛谷传送门AtCoder传送门很不错的状压。考虑先把最后作为答案的数聚到一起,再算它们的逆序对个数。设\(f_S\)为当前选的数集合为\(S\)的答案。有转移:选\(a_i\),答案加上之前选的比它大的数;不选\(a_i\),此时需要把左边的数或者右边的数往中间挪一个,答案加上左右两端的最......
  • AtCoder Regular Contest 115 F Migration
    洛谷传送门AtCoder传送门这种最大值最小化的题一般可以先考虑二分。设二分了一个\(mid\)。记\(A=(a_1,a_2,...,a_k)\)为表示每个棋子的位置的状态,如果\(A,B\)可以互相到达,就在它们之间连一条无向边。则要判断的是\(S=(s_1,s_2,...,s_k)\)和\(T=(t_1,t_2,...,t_k......
  • AtCoder Beginner Contest 158
    AtCoderBeginnerContest158https://atcoder.jp/contests/abc158基础不牢,地动山摇D-StringFormation一个小小的STL应用#include<bits/stdc++.h>#definelllonglongusingnamespacestd;strings;intq,t,f;charc;intmain(){cin>>s>>q......
  • AtCoder Problem Difficulty
    ABC299之前.......
  • AtCoder Regular Contest 111 F Do you like query problems?
    洛谷传送门AtCoder传送门挺有意思的计数。计数感觉很难做,不妨转成期望,期望又可以转成概率之和。考虑枚举\(w\in[0,m-1]\),把\(>w\)的数设为\(1\),\(\lew\)的数设为\(0\)。那么期望就是所有\(w\),\(a_i\)为\(1\)的概率之和。对于一个\(i\),只有以下的操作能改变\(......