前言:比赛前去做牙齿矫正,回来晚了 10 分钟……做比赛的运气全用在了一路绿灯上了(无语)。第二题切了两个半小时。决定写篇题解来抒发一下再记得愤怒愉悦之情。

AC 的想法很简单,就是表示出每一串连续的 \(\texttt{T}\),其长度分别为 \(l_1 \lim l_m\)。明显的,对于任何一个 \(l_i\),在一系列操作后,它的长度顶多加 \(2\),也就是左边多一个,右边多一个。明显的贪心,将 \(\texttt{T}\) 子串按长度从大到小排,然后只要枚举到 \(l_i < ans-1\),就可以结束了。因为它既是加两个,也只能等于 \(ans\)。然后每次更新 \(ans\)。

对于判断左右是否能增加一个,不是只判断有没有 \(\texttt{BTTB}\) 那么简单。拿左边来说,他可能长这样:

\[\texttt{(BTTBTBTBTB)TTTTTTT}
\]

他可以一路猛操作变成:

\[\texttt{(TBBTBTBTBT)TTTTTTT}
\]

我吗,蠢蠢地使用了暴力,然后喜提 \(2\mathcal{WA}+4\mathcal{TLE}\)。加个记忆化,喜提 \(2\mathcal{WA}\)。

两次的翻车记录在这里:4TLE+2WA2WA

为什么呢?因为这个样例:\(1 \texttt{B}\),要特判一下。(大概也只有我会漏掉这个样例的情况吧,悲。)

\(\mathcal{AC} \texttt{CODE}\):

#include <bits/stdc++.h>
using namespace std; int T,n,cnt;
struct Node {
int l,r,mm;
Node(int L=0,int R=0,int m=0) {
l=L,r=R,mm=m;
return ;
}
friend bool operator <(const Node a,const Node b) {
return a.mm>b.mm;
}
};
const int MS=100005;
Node node[MS];
char s[MS];
int pr[MS][2];
bool GO(int p,int drct) {
if(p<1||p>n-1) return 0;
if(pr[p][drct-1]!=-1) return pr[p][drct-1];
if(drct&1) {
if(p>2&&s[p]=='B'&&s[p-1]=='T'&&s[p-2]=='T'&&s[p-3]=='B') return pr[p][drct-1]=true;
if(s[p]=='B'&&s[p-1]=='T') return pr[p][drct-1]=GO(p-2,drct);
}
else {
if(p<n-3&&s[p]=='B'&&s[p+1]=='T'&&s[p+2]=='T'&&s[p+3]=='B') return pr[p][drct-1]=true;
if(s[p]=='B'&&s[p+1]=='T') return pr[p][drct-1]=GO(p+2,drct);
}
return pr[p][drct-1]=false;
} int main() {
scanf("%d",&T);
while(T--) {
memset(pr,-1,sizeof(pr));
scanf("%d%s",&n,s);
int l=-1;
cnt=0;
for(int i=0;i<n;i++) {
if(s[i]=='B'&&l>=0) node[++cnt]=Node(l,i-1,i-l),l=-1;
if(s[i]=='T'&&l<0) l=i;
}
if(l>=0) node[++cnt]=Node(l,n-1,n-l);
if(cnt==0) {
printf("0\n");
continue;
}
sort(node+1,node+1+cnt);
int ans=node[1].mm;
for(int i=1;i<=cnt&&node[i].mm>=ans-1;i++) {
if(GO(node[i].l-1,1)) node[i].mm++;
if(GO(node[i].r+1,2)) node[i].mm++;
ans=max(ans,node[i].mm);
}
printf("%d\n",ans);
}
return 0;
}

为什么辣么简单的暴力题要切两个半小时呢?因为我一直往 DP 和暴搜上考虑,浪费了两个小时。警钟长鸣。

「TAOI-2」Break Through the Barrier 题解的更多相关文章

  1. 「杂录」CSP-S 2019 爆炸记&题解

    考试状况 \(Day1\) \(8:30\) 解压,先打个含头文件和\(freopen\)的模板程序,准备做题. \(8:35\) 开题,心想着按顺序做吧,毕竟难度一般是按顺序排的. 第一题,一眼看过 ...

  2. LuoguP7505 「Wdsr-2.5」小小的埴轮兵团 题解

    Content 给出一个范围为 \([-k,k]\) 的数轴,数轴上有 \(n\) 个点,第 \(i\) 个点的位置为 \(a_i\).有 \(m\) 次操作,有且仅有以下三种: 1 x:所有点往右移 ...

  3. LOJ #2026「JLOI / SHOI2016」成绩比较

    很好的锻炼推柿子能力的题目 LOJ #2026 题意 有$n$个人$ m$门学科,第$ i$门的分数为不大于$U_i$的一个正整数 定义A「打爆」B当且仅当A的每门学科的分数都不低于B的该门学科的分数 ...

  4. 「BZOJ 4228」Tibbar的后花园

    「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 ...

  5. 「BZOJ 3645」小朋友与二叉树

    「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) ...

  6. 「学习笔记」Min25筛

    「学习笔记」Min25筛 前言 周指导今天模拟赛五分钟秒第一题,十分钟说第二题是 \(\text{Min25}​\) 筛板子题,要不是第三题出题人数据范围给错了,周指导十五分钟就 \(\text{AK ...

  7. 「POI2011 R1」Conspiracy

    「POI2011 R1」Conspiracy 解题思路 : 问题转化为,将点集分成两部分,其中一部分恰好组成一个团,其中另一部分恰好组成一个独立集. 观察发现,如果求出了一个解,那么答案最多可以在这个 ...

  8. 「GXOI / GZOI2019」简要题解

    「GXOI / GZOI2019」简要题解 LOJ#3083. 「GXOI / GZOI2019」与或和 https://loj.ac/problem/3083 题意:求一个矩阵的所有子矩阵的与和 和 ...

  9. loj #2026. 「JLOI / SHOI2016」成绩比较

    #2026. 「JLOI / SHOI2016」成绩比较   题目描述 THU 的 G 系中有许许多多的大牛,比如小 R 的室友 B 神.B 神已经厌倦了与其他的同学比较 GPA(Grade Poin ...

  10. Loj #3085. 「GXOI / GZOI2019」特技飞行

    Loj #3085. 「GXOI / GZOI2019」特技飞行 题目描述 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代 ...

随机推荐

  1. 【记录】MATLAB矩阵的批量元素修改方式,与Python的NumPy对比

    文章目录 二维矩阵 操作 1. 将数组大于0的数全部加1 2. 删除元素 ①删除单个元素 ②删除一列元素 3. 添加一行或多行 ①添加一行 ②添加多行 4. 获取行/列数 5. 格式化输出数组 结构数 ...

  2. 🧠 30 个 MCP 项目创意(附完整源码)

    MCP(Model Context Protocol)是一种新兴的开放协议,旨在标准化应用程序如何向大型语言模型(LLMs)提供上下文和工具.它允许 AI 代理与实际工具和应用程序交互,从而实现复杂的 ...

  3. 操作系统综合题之“用记录型信号量机制的wait操作和signal操作写出三个进程的同步代码(水果进箱问题-代码补充)”

    1.问题:假设一个水果赛选系统由三个进程A.B.C组成.进程A每次取一个水果,之后存放在货架F上,F的容量为每次只能存放一个水果.若货架上存放的是苹果则让进程B取出,并存放到苹果箱中:若货架上存放的是 ...

  4. yysxky

    哎,还有三天目标分数50分pde能否及格,我其实是有一些信心的我觉得我可以前两天觉得教资pde傻逼班里的模拟教资给我搞得非常恶心当时再加上根本本学不会,我真的会要崩溃的 现在结束了面试感觉其实还好会有 ...

  5. 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)

    1.问题描述: 通过CardRecognition识别身份证拍照拿到的照片地址,使用该方法获取不到图片文件,请问如何解决? 解决方案: //卡证识别实现页,文件名为CardDemoPage,需被引入至 ...

  6. XML注入

    XML注入 复现使用的题目为buuoj中的[NCTF2019]Fake XML cookbook 1和[NCTF2019]True XML cookbook 1 参考链接为https://xz.ali ...

  7. odoo接口

    @http.route('/zimo_lunch/select/<string:db_name>', type='http', auth='none')def trash_demo(sel ...

  8. 使用Spring AOP 和自定义注解统一API返回值格式

    摘要:统一接口返回值格式后,可以提高项目组前后端的产出比,降低沟通成本.因此,在借鉴前人处理方法的基础上,通过分析资料,探索建立了一套使用Spring AOP和自定义注解无侵入式地统一返回数据格式的方 ...

  9. 洛谷 P3201 [HNOI2009] 梦幻布丁

    洛谷 P3201 [HNOI2009] 梦幻布丁 祭我AC的第十道紫题. 听了一下午的 才调出来. 题意分析 洛谷传送门 给一个序列a,有两种操作-- 1 x y将序列中所有x全部变成y 2查询当前序 ...

  10. 【洛谷有题】NOI 笔试题库(非初赛)订正

    传送门 第一次做,那个成绩可是一个惨不忍睹-- 我还是想说--我虽然要用Linux,但是不一定要用到指令啊(吧)--编译啥的我可以用Vim|guide啊-- Linux 中为文件改名使用的命令是: m ...