首页 > 其他分享 >CF670E Correct Bracket Sequence Editor

CF670E Correct Bracket Sequence Editor

时间:2023-08-23 13:45:56浏览次数:38  
标签:删除 Sequence int 复杂度 d% 括号 Bracket Editor 500005

思路

发现此题除了模拟没有好的方法,所以考虑如何模拟。

先考虑删除操作,如果在删除的时候再去找要删除那些的话,就会使时间复杂度变高,所以考虑先预处理出每个括号对应的位置。如果按照操作删除括号,那么时间复杂度也是非常吓人的。所以我们考虑标记被删除的括号。

再考虑移动操作,如果移动的下一个位置是被删除的操作,则跳转至下一个位置对应的括号的下一个位置,直到得到的位置没有被删除。

最后再关注一下删除后光标的移动方式,模拟就写完了

TLE code

#include<bits/stdc++.h>
using namespace std;
int n,m,p,tz[500005],z[500005],top;
bool vis[500005];
char s[500005],t[500005];
int main()
{
	scanf("%d%d%d%s%s",&n,&m,&p,s,t),--p;
	for(int i=0;i<n;++i)
		if(s[i]=='(') z[++top]=i;
		else tz[i]=z[top],tz[z[top--]]=i;
	for(int i=0;i<m;++i)
	{
		if(t[i]=='L')
		{
			--p;
			while(vis[p]) p=tz[p-1]-1;
		}
		if(t[i]=='R')
		{
			++p;
			while(vis[p]) p=tz[p+1]+1;
		}
		if(t[i]=='D')
		{
			vis[p]=vis[tz[p]]=1,p=max(p,tz[p]);
			int tp=p;
			if(p==n-1) while(vis[p]) p=tz[p]-1;
			else{++p;while(vis[p])p=tz[p]+1;}
			if(p==n){p=tp;while(vis[p]) p=tz[p]-1;}//如果左边没括号了,就跳转到左边第一个没删除的括号
		}
	}
	for(int i=0;i<n;++i)
	{
		if(vis[i]) i=tz[i];
		else printf("%c",s[i]);
	}
	return 0;
}

但是 TLE 了,怎么办?

先分析一下 TLE 的原因,如果在括号都是 () 且删除了一些括号的情况下,频繁地在被删除的括号左右移动,就非常容易超时。

所以考虑减少跳转的次数,想到了记录每个括号左右第一个没删除的位置,移动操作的时间复杂度就变成了 \(O(1)\)。

AC code

#include<bits/stdc++.h>
using namespace std;
int n,m,p,tp,z[500005],top;
char s[500005],t[500005];
struct node{int l,r,tz;}a[500005];
int main()
{
    scanf("%d%d%d%s%s",&n,&m,&p,s,t),--p;
    for(int i=0;i<n;i++)
	{
    	a[i].l=i-1,a[i].r=i+1;
    	if(s[i]=='(') z[++top]=i;
    	else a[i].tz=z[top],a[z[top--]].tz=i;
	}
	for(int i=0;i<m;i++)
	{
		if(t[i]=='L') p=a[p].l;
		if(t[i]=='R') p=a[p].r;
		if(t[i]=='D')
		{
			p=min(p,a[p].tz),tp=a[p].tz;
			if(a[p].l!=-1) a[a[p].l].r=a[tp].r;//注意边界
			a[a[tp].r].l=a[p].l;
			if(a[a[p].l].r==n) p=a[p].l;
			else p=a[tp].r;
		}
	}
	while(p>0&&a[p].l!=-1) p=a[p].l;
	while(p<n) printf("%c",s[p]),p=a[p].r;
    return 0;
}

标签:删除,Sequence,int,复杂度,d%,括号,Bracket,Editor,500005
From: https://www.cnblogs.com/One-JuRuo/p/17651394.html

相关文章

  • json-schema编辑器(json-schema-editor)
     最近在找一个 json-schema的编辑器,在网上找了找,以下两个项目用的比较多一、两款json-schema-editor1、vue-json-schema-editor-visual一个高效易用的基于Vue+ElementUI的json-schema编辑器。git地址:https://github.com/giscafer/vue-json-schema-editor-visualdem......
  • 如何复制word的图文到xhEditor中自动上传
    ​ 1.编辑器修改(可选)1.1在 ueditor/config.json 中添加代码块    /* 上传word配置 */    "wordActionName":"wordupload",/* 执行上传视频的action名称 */    "wordFieldName":"upfile",/* 提交的视频表单名称 */    "wordPathFormat":"/p......
  • 如何复制word的图文到wangEditor中自动上传
    ​ 这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@     page contentType="text/html;cha......
  • ValueError: setting an array element with a sequence.
    1.错误报错ValueError:settinganarrayelementwithasequence.Therequestedarrayhasaninhomogeneousshapeafter1dimensions.Thedetectedshapewas(12782,)+inhomogeneouspart.2.问题原因numpy版本问题:解决办法:卸载现有版本numpy,安装numpy1.21.0(python3.6)......
  • TWCMS编辑器Ueditor超链接添加nofollow属性
    打开ueditor目录再进入dialogs/link目录,编辑link.html<tr><tdcolspan="2"><labelfor="target"><varid="lang_input_target"></var></label>inputid="target"type="checkbox"/>&......
  • IDEA 刷题工具 leetcode editor
    突然有一天不好用了,然后抓取新的cookie后也登陆不上https://github.com/shuzijun/leetcode-editor/issues/402之前的IDEA版本太低了,不支持JCEF更新到最新的2023.2版本但是又有了新的问题,发现evalreset用不了了,会抛出异常最后选择升级到2020.2.4版本的IDEA,解......
  • Codeforces EduRound153 Editorial
    A如果有\(()\)那么肯定是不合法的有两种很简单的构造,()()()()...()和((((...)))),如果一个串是第一种构造的子串那么一定不是第二种构造的子串,反之亦然。使用python取之B把\(m\%k\)的余数补齐,再把多出来的\(1\)价格regularcoins\(m\)个一组f使用python取之C......
  • 安装fastadmin插件之百度Ueditor编辑器
    1、前置条件安装百度Ueditor编辑器插件前,需要先安装好fastadmin框架,如何安装fastadmin框架,请浏览该文档https://www.fastadmin.net/video.html2、安装百度Ueditor编辑器插件点击插件管理点击本地安装,选择百度Ueditor编辑器压缩包安装成功,刷新浏览器然后点击本地插件安......
  • wangEditor 自定义上传图片
    //需要项目后台提供上传接口uploadFile下载接口FILE_URL:Object.defineProperties(Vue.prototype,{FILE_URL:{value:function(fileId){if(!fileId){return}return(process.env.VUE_APP_REMOTE_URL+'mi'+......
  • UMEditor 复制word里面带图文的文章,图片可以直接显示
    ​ 百度ueditor新增的将word内容导入到富文本编辑框的功能怎么没有啊,...ueditor实现word文档的导入和下载功能的方法:1、UEditor没有提供word的导入功能,只能说是粘贴复制。2、方案:用poi来提供word导入,思路是将word转换为html输出,再用UEditor提供的setContent()方法将html的内容......