[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 换成 (,) 中的一个(同一个字母必须要换成同一个字符),使得最后得到的括号序 ...
随机推荐
- 《小白WEB安全入门》02. 开发篇
@ 目录 初识HTML潜在漏洞 初识CSS潜在漏洞 初识JS潜在漏洞 初识后端潜在漏洞 后端能做什么 后端种类 后端框架 潜在漏洞 本系列文章只叙述一些超级基础理论知识,极少有实践部分 本文涉及到的语 ...
- Leetcode刷题笔记——二分法
二分法是搜索算法中极其典型的方法,其要求输入序列有序并可随机访问.算法思想为 输入:有序数组nums,目的数值target 要求输出:如果target存在在数组中,则输出其index,否则输出-1 将 ...
- VulnStack - ATT&CK红队评估实战(一) Writeup
VulnStack - ATT&CK红队评估实战(一) Writeup VulnStack(一)环境搭建 项目地址 http://vulnstack.qiyuanxuetang.net/vul ...
- Xshell7 / Xftp7 永久免费,官网直连下载地址
主要目的是让大家随时随地从官网下载Xshell和Xftp免费版(个人/家庭/学校免费) 最新变动:官方目前仅提供最新版以及上一个版本的软件下载!其他版本不提供下载 免费版5版本(最后一个版本,无任何限 ...
- HTML一键打包EXE工具1.9.9发布 (包含最新版下载地址)
HTML一键打包EXE工具(HTML封装EXE,桌件)是一款能将任意HTML项目(网址)打包为单个EXE文件的工具,无需依赖浏览器和服务器,直接双击即可运行.该工具支持多种HTML项目类型,包括KRP ...
- Field 'xxxxxx' doesn't have a default value 错误的解决办法
在写web项目的时候,出现 Field 'xxxxx' doesn't have a default value 这个错误,直接找到你的数据库,然后打开设计表,看下面自增递增是否勾选上了,如果没有勾上 ...
- 集群部署专题之一:详解集群间SSH无密码登录配置步骤
一.SSH简介 SSH(Secure Shell)是一种网络安全协议,通过加密和认证机制实现安全访问和文件传输等业务.传统远程登录和文件传输方式有Telnet或FTP,这两种方式都使用明文传输数据,存 ...
- 机器学习(6)K近邻算法
k-近邻,通过离你最近的来判断你的类别 例子: 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近的样本中大多数属于某一类别),则该样本属于这个类别 K近邻需要做标准化处理 例如: imp ...
- IP协议:连接你我,掌握互联网的关键
IP 基本认识 在之前的章节中,我们已经详细介绍了应用层和传输层的相关概念和原理,了解了进程之间如何进行可靠的数据传输.我们知道,传输层的头部包含了进程所使用的端口信息,这是为了确保数据能够正确地传递 ...
- 删除软件 geek
下载链接 Geek Uninstaller_v1.5.1.162 -技术松鼠 (jishusongshu.com)