牛客小白月赛87 D 小苯的IDE括号问题(hard)

原题链接:D-小苯的IDE括号问题(hard)

题目大意:给定一个长度为n的字符串,字符串由(,)和I构成,m组询问,如果输入backspace,如果I左右是(和)就一起删除,如果是只有(就只删除左边。如果是delete就删除右边,如果右边存在。如果输入<-就把I向左移动,如果是->就把I向右移动。

思路:可以观察到每次操作都与I有关,并且题目里面涉及大量的删改,我的思路和题解不一样,是用数组来记录字符,然后用数组来模拟链表,这样可以快速的删除I左右的元素和移动I。官方的思路是用栈来存在I左边和右边的字符串,然后根据条件来操作,为了方便输出,栈可以用vector来模拟。

我的思路代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define endl '\n' 
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pii;
const int N=1e6+10,mod=10007;
char p[N];
ll l[N],r[N];
int main()
{ios::sync_with_stdio(NULL);cin.tie(0),cout.tie(0);ll n,m;cin>>n>>m;ll cnt=0;for(int i=1;i<=n;i++){cin>>p[i];l[i]=i-1;r[i]=i+1;if(p[i]=='I')cnt=i;}r[0]=1;l[n+1]=n;while(m--){if(r[0]>n)break;string s;cin>>s;if(s=="backspace"){ll a=l[cnt],b=cnt,c=r[cnt];if(a==0)continue;else if(c==n+1){ll x=l[a];r[x]=b,l[b]=x;}else{if(p[a]=='('&&p[c]==')'){ll x=l[a],y=r[c];r[x]=b;l[b]=x;r[b]=y;l[y]=b;}else{ll x=l[a];r[x]=b;l[b]=x;}}}else if(s=="delete"){ll a=l[cnt],b=cnt,c=r[cnt];if(c==n+1)continue;else{ll x=r[c];l[x]=b;r[b]=x;}}else if(s=="<-"){ll a=l[cnt],b=cnt,c=r[cnt];if(a==0)continue;ll x=l[a];l[c]=a;r[a]=c;l[b]=x;r[b]=a;r[x]=b;l[a]=b;}if(s=="->"){ll a=l[cnt],b=cnt,c=r[cnt];if(c==n+1)continue;ll x=r[c];r[a]=c;l[c]=a;l[b]=c;r[b]=x;r[c]=b;l[x]=b;}}for(int i=r[0];i<=n;i=r[i]){cout<<p[i];}cout<<endl;return 0;
}

官方思路代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define endl '\n' 
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pii;
const int N=1e6+10,mod=10007;
char p[N];
int main()
{ios::sync_with_stdio(NULL);cin.tie(0),cout.tie(0);ll n,m;cin>>n>>m;ll cnt=0;for(int i=1;i<=n;i++){cin>>p[i];if(p[i]=='I')cnt=i;}vector<char> a,b;for(int i=1;i<cnt;i++)a.push_back(p[i]);//exit(0);for(int i=n;i>cnt;i--)b.push_back(p[i]);while(m--){string s;cin>>s;if(s=="backspace"){if(a.size()){if(b.size()&&b[b.size()-1]==')'&&a[a.size()-1]=='('){b.pop_back();}a.pop_back();}}if(s=="delete"){if(b.size()){b.pop_back();}}if(s=="<-"){if(a.size()){b.push_back(a[a.size()-1]);a.pop_back();}}if(s=="->"){if(b.size()){a.push_back(b[b.size()-1]);b.pop_back();}}}for(int i=0;i<a.size();i++){cout<<a[i];}cout<<'I';for(int i=b.size()-1;i>=0;i--){cout<<b[i];}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15个学习Go语言的网站推荐

1. Tour of Go 网站地址&#xff1a;tour.golang.org 网站介绍&#xff1a;Tour of Go是一个关于Go语言特性的交互式游览和教程 2. Go by Example 网站地址&#xff1a;gobyexample.com 网站介绍&#xff1a;Go by Example是一个通过一系列可执行代码实例来学习Go语言的优…

Java解决删除某些元素后的数组均值

Java解决删除某些元素后的数组均值 01 题目 给你一个整数数组 arr &#xff0c;请你删除最小 5% 的数字和最大 5% 的数字后&#xff0c;剩余数字的平均值。 与 标准答案 误差在 10-5 的结果都被视为正确结果。 示例 1&#xff1a; 输入&#xff1a;arr [1,2,2,2,2,2,2,2,…

最优字符串分隔符:零宽度空格和字符

引言 在文本处理和格式化中&#xff0c;选择合适的分隔符是至关重要的。 本文将在介绍两个不常见但功能强大的分隔符&#xff1a;零宽度空格和&#x10000;字符。 零宽度空格&#xff08;Zero Width Space&#xff09; 零宽度空格是Unicode字符集中的一个特殊字符&#xff…

2024前端面试准备之uniapp篇

全文链接!!!!!!! 1. UniApp和其他跨平台框架(如React Native、Flutter)有什么区别? 语言和技术栈:UniApp使用Vue.js作为开发语言和技术栈,而React Native使用React.js,Flutter使用Dart语言。开发者可以根据自己的技术背景和偏好选择合适的框架。 性能和体验:Uni…

vue3项目配置按需自动引入自定义组件unplugin-vue-components

我们通常在项目中&#xff0c;需要手动引入自定义的各种组件&#xff0c;如果涉及的页面功能比较多的话&#xff0c;光是import的长度都能赶上春联了。 如果&#xff0c;能有一个插件帮我们实现自动引入&#xff0c;是不是要谢天谢地了呢&#xff1f; 接下来就进入我们的主角u…

uni-app判断不同端

大家好&#xff0c;今天给大家分享的知识是在uni-app中如何区分是在什么端操作的程序 话不多说直接上代码&#xff1a; // #ifdef APP-PLUS<view>APP端</view>// #endif// #ifdef H5<view>H5端</view>// #endif// #ifdef MP<view>小程序端</v…

centos中安装go

安装过程 &#xff08;1&#xff09;源码二进制下载地址 wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz &#xff08;2&#xff09;将下载的二进制包解压至 /usr/local目录。 tar -C /usr/local/ -xzf go1.13.5.src.tar.gz &#xff08;3&#xff09;设置环…

XR行业首家|李未可科技通过深度合成服务算法备案

2月18日&#xff0c;国家网信办发布第四批深度合成服务算法备案。 根据《互联网信息服务深度合成管理规定》第十九条规定&#xff0c;具有舆论属性或者社会动员能力的深度合成服务提供者&#xff0c;应当按照《互联网信息服务算法推荐管理规定》履行备案和变更、注销备案手续。…

人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_003---人工智能工作笔记0098

前面的环境安装差不多了,这里我没有安装git,因为我认为用不到,好下面去下载算法: 首先是算法下载: https://codeload.github.com/THUDM/ChatGLM-6B/zip/refs/heads/main 算法的下载连接是这里: 可以看到下载以后得到这个ChatGLM-6B-main这个算法压缩包 然后我们再去: 然后…

Guitar Pro8最新官方破解版下载步骤教程

使用Guitar Pro 8的步骤如下&#xff1a; 安装Guitar Pro 8软件。双击打开安装包&#xff0c;按照提示完成安装过程。打开软件后&#xff0c;使用左侧工具栏上的按钮输入谱号和拍号。点击左侧工具栏的和弦图按钮&#xff0c;输入所需要的和弦。使用鼠标和键盘在乐谱中输入乐曲…

MCAL知识点(二十七):TC275如何通过GPT12实现ABZ解码

目录 1、概述 2、代码实现 1、概述 GPT12 - General Purpose Timer Unit (GPT12):通用定时器单元,具备较为灵活的定时器结构,可以用来做定时器、事件计数、脉冲宽度测量、产生PWM、频率调制、ABZ编码器增量测量。文章记录一下如何通过GPT12实现编码器ABZ信号的测量。 注意…

P14 前缀和原理和特点

prefix表示前缀和&#xff0c;前缀和由一个用户输入的数组生成 prefix可以用于快速生成prefix prefix可以o&#xff08;1&#xff09;求数组a[]的一段区间的和&#xff1b; sum(l,r)prefix[r]-prefix[l-1] prefix是一种预处理算法&#xff0c;只适用于a数组为静态数组的情况…

修复 Android 手机陷入恢复模式的 5 种方法

您的手机卡在 Android Recovery 模式且无法退出此模式&#xff1f;无论您按什么按钮组合&#xff0c;甚至在取出并重新插入电池后重新启动手机&#xff0c;手机都会启动回到恢复模式吗&#xff1f; Android卡在recovery模式的情况并不罕见&#xff0c;各种品牌的Android手机都…

极狐GitLab 如何配置多个 LDAP?

本文仅适用于极狐GitLab私有化部署场景。 场景化痛点 极狐GitLab 的多 LDAP 接入功能解决了企业在以下场景中可能遇到的痛点&#xff1a; 多个组织/部门的整合&#xff1a;在大型企业或跨国公司中&#xff0c;往往存在多个组织或部门&#xff0c;它们可能拥有独立的 LDAP 服务…

pytorch chunk的使用举例

在 PyTorch 中&#xff0c;chunk 是一个用于将张量&#xff08;tensor&#xff09;按指定维度进行切片的函数。它可以将一个张量切分成多个块。 下面是一个使用 chunk 函数的示例&#xff1a; python import torch # 创建一个大小为 (6, 8) 的张量 tensor torch.arange(48)…

LeetCode42.接雨水(单调栈)

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 &#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,…

OS X(MACOS) C/C++ 遍历系统所有的IP路由表配置。

以下源实现为遍历MAC苹果电脑系统上配置的所有IP路由表配置&#xff0c;回调 predicate 过滤函数只在 AF_INET(IPV4)的时候跳出&#xff0c;其它时不处理&#xff0c;人们可以根据自己的需求改动。 无需依赖MAC OS框架库提供的函数&#xff0c;最小依赖才有可能更容易移植代码到…

解决kkFileView4.4.0版本pdf、word不能预览问题

这里使用的是http下载流url预览&#xff0c;遇到的问题。 官方使用指南&#xff1a;kkFileView - 在线文件预览 1 前端测试代码 1.1 官方示例代码 1.2 本人测试代码 注意&#xff1a;要给预览文件的url进行编码encodeURIComponent(Base64.encode(previewUrl))。 <!DOCTYP…

Linux 驱动开发基础知识——LED 模板驱动程序的改造:设备树(十一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

【4.1计算机网络】TCP-IP协议簇

目录 1.OSI七层模型2.常见协议及默认端口3.TCP与UDP的区别 1.OSI七层模型 osi七层模型&#xff1a; 1.应用层 2.表示层 3.会话层 4.传输层&#xff1a;TCP为可靠的传输层协议。 5.网络层 6.数据链路层 7.物理层 2.常见协议及默认端口 3.TCP与UDP的区别 例题1. 解析&#xff1…