「TAOI-2」Break Through the Barrier 题解
前言:比赛前去做牙齿矫正,回来晚了 10 分钟……做比赛的运气全用在了一路绿灯上了(无语)。第二题切了两个半小时。决定写篇题解来抒发一下再记得愤怒愉悦之情。
AC 的想法很简单,就是表示出每一串连续的 \(\texttt{T}\),其长度分别为 \(l_1 \lim l_m\)。明显的,对于任何一个 \(l_i\),在一系列操作后,它的长度顶多加 \(2\),也就是左边多一个,右边多一个。明显的贪心,将 \(\texttt{T}\) 子串按长度从大到小排,然后只要枚举到 \(l_i < ans-1\),就可以结束了。因为它既是加两个,也只能等于 \(ans\)。然后每次更新 \(ans\)。
对于判断左右是否能增加一个,不是只判断有没有 \(\texttt{BTTB}\) 那么简单。拿左边来说,他可能长这样:
\]
他可以一路猛操作变成:
\]
我吗,蠢蠢地使用了暴力,然后喜提 \(2\mathcal{WA}+4\mathcal{TLE}\)。加个记忆化,喜提 \(2\mathcal{WA}\)。
为什么呢?因为这个样例:\(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 题解的更多相关文章
- 「杂录」CSP-S 2019 爆炸记&题解
考试状况 \(Day1\) \(8:30\) 解压,先打个含头文件和\(freopen\)的模板程序,准备做题. \(8:35\) 开题,心想着按顺序做吧,毕竟难度一般是按顺序排的. 第一题,一眼看过 ...
- LuoguP7505 「Wdsr-2.5」小小的埴轮兵团 题解
Content 给出一个范围为 \([-k,k]\) 的数轴,数轴上有 \(n\) 个点,第 \(i\) 个点的位置为 \(a_i\).有 \(m\) 次操作,有且仅有以下三种: 1 x:所有点往右移 ...
- LOJ #2026「JLOI / SHOI2016」成绩比较
很好的锻炼推柿子能力的题目 LOJ #2026 题意 有$n$个人$ m$门学科,第$ i$门的分数为不大于$U_i$的一个正整数 定义A「打爆」B当且仅当A的每门学科的分数都不低于B的该门学科的分数 ...
- 「BZOJ 4228」Tibbar的后花园
「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 ...
- 「BZOJ 3645」小朋友与二叉树
「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) ...
- 「学习笔记」Min25筛
「学习笔记」Min25筛 前言 周指导今天模拟赛五分钟秒第一题,十分钟说第二题是 \(\text{Min25}\) 筛板子题,要不是第三题出题人数据范围给错了,周指导十五分钟就 \(\text{AK ...
- 「POI2011 R1」Conspiracy
「POI2011 R1」Conspiracy 解题思路 : 问题转化为,将点集分成两部分,其中一部分恰好组成一个团,其中另一部分恰好组成一个独立集. 观察发现,如果求出了一个解,那么答案最多可以在这个 ...
- 「GXOI / GZOI2019」简要题解
「GXOI / GZOI2019」简要题解 LOJ#3083. 「GXOI / GZOI2019」与或和 https://loj.ac/problem/3083 题意:求一个矩阵的所有子矩阵的与和 和 ...
- loj #2026. 「JLOI / SHOI2016」成绩比较
#2026. 「JLOI / SHOI2016」成绩比较 题目描述 THU 的 G 系中有许许多多的大牛,比如小 R 的室友 B 神.B 神已经厌倦了与其他的同学比较 GPA(Grade Poin ...
- Loj #3085. 「GXOI / GZOI2019」特技飞行
Loj #3085. 「GXOI / GZOI2019」特技飞行 题目描述 公元 \(9012\) 年,Z 市的航空基地计划举行一场特技飞行表演.表演的场地可以看作一个二维平面直角坐标系,其中横坐标代 ...
随机推荐
- 【记录】MATLAB矩阵的批量元素修改方式,与Python的NumPy对比
文章目录 二维矩阵 操作 1. 将数组大于0的数全部加1 2. 删除元素 ①删除单个元素 ②删除一列元素 3. 添加一行或多行 ①添加一行 ②添加多行 4. 获取行/列数 5. 格式化输出数组 结构数 ...
- 🧠 30 个 MCP 项目创意(附完整源码)
MCP(Model Context Protocol)是一种新兴的开放协议,旨在标准化应用程序如何向大型语言模型(LLMs)提供上下文和工具.它允许 AI 代理与实际工具和应用程序交互,从而实现复杂的 ...
- 操作系统综合题之“用记录型信号量机制的wait操作和signal操作写出三个进程的同步代码(水果进箱问题-代码补充)”
1.问题:假设一个水果赛选系统由三个进程A.B.C组成.进程A每次取一个水果,之后存放在货架F上,F的容量为每次只能存放一个水果.若货架上存放的是苹果则让进程B取出,并存放到苹果箱中:若货架上存放的是 ...
- yysxky
哎,还有三天目标分数50分pde能否及格,我其实是有一些信心的我觉得我可以前两天觉得教资pde傻逼班里的模拟教资给我搞得非常恶心当时再加上根本本学不会,我真的会要崩溃的 现在结束了面试感觉其实还好会有 ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit (3)
1.问题描述: 通过CardRecognition识别身份证拍照拿到的照片地址,使用该方法获取不到图片文件,请问如何解决? 解决方案: //卡证识别实现页,文件名为CardDemoPage,需被引入至 ...
- XML注入
XML注入 复现使用的题目为buuoj中的[NCTF2019]Fake XML cookbook 1和[NCTF2019]True XML cookbook 1 参考链接为https://xz.ali ...
- odoo接口
@http.route('/zimo_lunch/select/<string:db_name>', type='http', auth='none')def trash_demo(sel ...
- 使用Spring AOP 和自定义注解统一API返回值格式
摘要:统一接口返回值格式后,可以提高项目组前后端的产出比,降低沟通成本.因此,在借鉴前人处理方法的基础上,通过分析资料,探索建立了一套使用Spring AOP和自定义注解无侵入式地统一返回数据格式的方 ...
- 洛谷 P3201 [HNOI2009] 梦幻布丁
洛谷 P3201 [HNOI2009] 梦幻布丁 祭我AC的第十道紫题. 听了一下午的 才调出来. 题意分析 洛谷传送门 给一个序列a,有两种操作-- 1 x y将序列中所有x全部变成y 2查询当前序 ...
- 【洛谷有题】NOI 笔试题库(非初赛)订正
传送门 第一次做,那个成绩可是一个惨不忍睹-- 我还是想说--我虽然要用Linux,但是不一定要用到指令啊(吧)--编译啥的我可以用Vim|guide啊-- Linux 中为文件改名使用的命令是: m ...