[ABC328D] Take ABC 题解
题目翻译
题目描述
给你一个字符串 \(S\) 包含 A、B 和 C 三个不用的字符。
只要字符串 \(S\) 中包含连续的 ABC 就将 ABC 删除掉
再字符串 \(S\) 不能操作之后输出这个字符串
限制
- \(S\) 的长度小于 \(2 \times 10^5\)
思路1
总结一下这道题目的操作,可以发现就是将字符串删除一部分接着将剩下的部分合并,这不是链表的操作吗。
就直接扫描字符串,如果出现了连续的 ABC 就将其删除。
接着因为删除了这个连续的 ABC 之后,肯能会有新出现的 ABC 连接在一起,所以在最坏的情况下就需要向前回溯两个字符。
但是在回溯的时候需要注意一个细节那就是上一个可能就是第一个了,如果继续回溯就会RE。
#include<bits/stdc++.h>
char a[200005];
int n;
int nex[200005]; //储存第i个元素的下一个元素
int fr[200005]; //储存第i个元素的上一个元素
int head=1; //储存第一个元素
int main(){
scanf("%s",a);
n=strlen(a);
for(register int i=n;i>=1;i--) a[i]=a[i-1];
for(register int i=1;i<=n;i++) nex[i]=i+1;
for(register int i=2;i<=n;i++) fr[i]=i-1;
nex[n+1]=-1; //标记链表结尾
for(register int i=head;nex[i]!=-1&&nex[nex[i]]!=-1&&nex[nex[nex[i]]]!=-1;){
if(a[i]=='A'&&a[nex[i]]=='B'&&a[nex[nex[i]]]=='C'){ //如果满足要求
nex[fr[i]]=nex[nex[nex[i]]]; //删除这三个元素
fr[nex[nex[nex[i]]]]=fr[i];
if(i==head){ //如果上一个就是头
head=nex[nex[nex[i]]];
continue;
}if(fr[i]==head) i=head;
else i=fr[fr[i]];
continue;
}i=nex[i];
}for(register int i=head;nex[i]!=-1;i=nex[i]) putchar(a[i]); //将剩余的输出
return 0;
}
思路2
其实这道题目之所以使用普通数组会超时,是因为在删除后将后面的元素向前转移会划分很多时间。
那么只要后面呢没有元素,就不会存在向前移动导致花费大量时间的问题了。
因为每一次删除操作只会影响前后 \(2\) 个字符,所以可以考虑使用栈进行求解。
每次入一个元素入栈,如果站内的元素个数大于 \(3\) 个,就查看最后 \(3\) 个元素是否是 ABC。
如果是就将其删除,否则继续插入元素。
#include<bits/stdc++.h>
using namespace std;
string s;
char q[200010];
int top;
int main(){
cin>>s;
for(int i=0;i<s.size();i++){ //将元素一次插入栈中
q[++top]=s[i];
if(top>2&&q[top]=='C'&&q[top-1]=='B'&&q[top-2]=='A') top-=3; //一定要判断元素的个数,否则会RE
}for(int i=1;i<=top;i++) cout<<q[i]; //将栈内的元素一次输出
return 0;
}
总结
其实这两种方法的本质都是一样的,只是的具体实现方法不一样。
链表的思维难度没有栈的做法高,但是对码力的要求与效率比栈要高一点。
[ABC328D] Take ABC 题解的更多相关文章
- codeforces CF475 ABC 题解
Bayan 2015 Contest Warm Up http://codeforces.com/contest/475 A - Bayan Bus B - Strongly Connected Ci ...
- Codeforces Round #312 (Div. 2) ABC题解
[比赛链接]click here~~ A. Lala Land and Apple Trees: [题意]: AMR住在拉拉土地. 拉拉土地是一个很漂亮的国家,位于坐标线.拉拉土地是与著名的苹果树越来 ...
- ACM金牌选手讲解LeetCode算法《栈和队列的高级应用》
大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM金牌,保研985,<ACM金牌选手讲解LeetCode算法系列>作者. 上一篇文章讲解了<线性表>中的数组.链 ...
- AtCoder ABC 242 题解
AtCoder ABC 242 题解 A T-shirt 排名前 \(A\) 可得 T-shirt 排名 \([A+1,B]\) 中随机选 \(C\) 个得 T-shirt 给出排名 \(X\) ,求 ...
- Codeforces Round #109 (Div. 1) 题解 【ABC】
A - Hometask 题意:给你一个字符串,然后再给你k个禁止挨在一起的字符串,问你最少删除多少个字符串,使得不会有禁忌的字符串对挨在一起.题目保证每个字符最多出现在一个禁忌中. 题解:由于每个字 ...
- AtCoder ABC 215 简要题解
A - B 模拟 C 可以直接爆搜,也可以写逐位确定的多项式复杂度算法,使用多重组合式求随意乱排的方案数. D 首先对 \(A\) 所有数暴力分解质因数,然后把遇到过的质因数打上标记. 接下来再对 \ ...
- [题解] Atcoder Beginner Contest ABC 270 G Ex 题解
点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求 ...
- Atcoder Beginner Contest ABC 284 Ex Count Unlabeled Graphs 题解 (Polya定理)
题目链接 弱化版(其实完全一样) u1s1,洛谷上这题的第一个题解写得很不错,可以参考 直接边讲Polya定理边做这题 问题引入:n颗珠子组成的手串,每颗珠子有两种不同的颜色, 如果两个手串能够在旋转 ...
- Codeforces 1323 div2题解ABC
A. Even Subset Sum Problem 签到题 #include <bits/stdc++.h> using namespace std; template <type ...
- CF1494A ABC String 题解
Content 给定 \(T\) 个仅包含大写字母 A,B,C 的字符串 \(s\).问你是否能够通过将每个 A,B,C 换成 (,) 中的一个(同一个字母必须要换成同一个字符),使得最后得到的括号序 ...
随机推荐
- Selenium 学习笔记
Selenium 学习笔记 Selenium 框架是时下在 Web 领域中被使用得最为广泛的自动化测试工具集之一,它能帮助程序员们面向指定的 Web 前端应用快速地开发出自动化测试用例,且能实现跨各种 ...
- ABP Framework 7.4 RC 新增功能简介:增强微服务架构支持
ABP Framework 版本号:7.4.0-rc.1 发布时间:2023.8.16 阅读原文:ABP.IO Platform 7.4 RC Has Been Published 翻译:iEricL ...
- [错误] SQL logic error near "date": syntax error
问题的来源 今天把一个项目的数据库从MySQL改到Sqlite 调试时发生了这个错误. 百度又看不懂英文(很多是国外发的), 就折腾了一下 原因 C# Sqlite 不能使用参数前缀"?&q ...
- ps--提升字体排版的美感四个有效方法
一,文字的摆放位置 (字体的选择不要超过三种,分散注意力)
- 20个最佳实践提升Terraform工作流程|Part 1
Terraform 是管理基础设施及代码(IaC)最常用的工具之一,它能使我们安全且可预测地对基础设施应用更改.刚开始上手 Terraform 可能会感觉有些不容易,但很快就能对该工具有基本的了解,随 ...
- Record - Nov. 28st, 2020 - Exam. REC
Prob. 1 Desc. & Link. 暴力为 \(\Theta(NK)\). 正解(也许): 把每一个全为正整数的子段找出来. 然后判断一下中间连接的情况即可. 但是这样决策情况太多了. ...
- Mac上虚拟环境的安装与使用
Mac上虚拟环境的安装与使用 介绍 virtualenv是python虚拟环境,能够和系统环境相隔离,保持环境的纯净. virtualenvwrapper可以方便管理虚拟环境 安装 pip insta ...
- 解决软件安装无法自定义文件夹,自动安装在C盘 (Windows系统)
其实就是软链接的简单应用 1.软件已经自动安装 2.完全退出当前软件 3.通过软件图标的属性找到其实际的安装目录 4.进入该软件的安装目录 5.将该软件整个剪切(你没有看错)到指定文件夹(自定义的安装 ...
- golang Context应用举例
Context本质 golang标准库里Context实际上是一个接口(即一种编程规范. 一种约定). type Context interface { Deadline() (deadline ti ...
- Programming abstractions in C阅读笔记:p166-p175
<Programming Abstractions In C>学习第58天,p166-p175总结. 一.技术总结 1.斐波那契数列(Fibonacci Sequenc) (1)斐波那契数 ...