[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 换成 (,) 中的一个(同一个字母必须要换成同一个字符),使得最后得到的括号序 ...
随机推荐
- Vue3 vite:is a JavaScript file. Did you mean to enable the 'allowJs' option?
描述 今天在vue3+vite下进行打包时,突然vscode报了一个error. 大概的意识是询问是否启用"allowJS"选项,因为该文件在程序内是指定用于编译的根文件. 提示信 ...
- 《SQL与数据库基础》16. 锁
目录 锁 全局锁 表级锁 表锁 元数据锁 意向锁 行级锁 行锁 间隙锁 临键锁 本文以 MySQL 为例 锁 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU. ...
- 以程序员的视角,介绍如何通过API接口获取淘宝商品数据的方法和步骤,并提供实际代码示例
当我们想要获取淘宝商品数据时,可以通过调用淘宝开放平台的API接口来实现.下面是一些步骤和示例代码来帮助你开始. 步骤1:申请开发者账号和应用 在开始之前,你需要在淘宝开放平台上注册一个开发者账号 ...
- VR国标
<软件基本要求与测试方法>
- Particles
Smiling & Weeping ----我本想边走边爱,可你一个人就挡住了人山人海 牢骚:其实想明白了也就这么一回事,当时一直想dp,(# ̄- ̄#) 正解:其实题目说的明明白白,任选一个数 ...
- 【krpano】密码插件
密码插件可以在浏览场景或者执行action之前弹出密码输入框,要求用户输入密码.当密码输入成功了才可以进行下一步操作. 下载地址:http://pan.baidu.com/s/1gfOKKKF 给场景 ...
- Vue 中的 Ajax
1.1 使用代理服务器 1.1.1 方式一 在 vue.config.js 中添加如下配置: devServer:{ proxy:"http://localhost:5000" } ...
- 【爬虫笔记】Python爬虫简单运用爬取代理IP
一.前言 近些年来,网络上的爬虫越来越多,很多网站都针对爬虫进行了限制,封禁了一些不规则的请求.为了实现正常的网络爬虫任务,爬虫常用代理IP来隐藏自己的真实IP,避免被服务器封禁.本文将介绍如何使用P ...
- JS逆向实战23 某市wss URL加密+请求头+ws收发
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 本文首发链接为: http ...
- bash解释器特性、目录结构、命令种类及优先级、常用命令
bash解释器的交互式环境特性 命令和文件自动补全 注意:Tab只能补全命令和文件及其文件路径 [root@localhost ~]# ls /etc/sysconfig/network-script ...