消除游戏(第十三届蓝桥杯省赛C++C组 , 第十三届蓝桥杯省赛PythonA/B/研究生组)

在一个字符串 S 中,如果 Si=Si−1 且 Si≠Si+1,则称 Si 和 Si+1 为边缘字符。

如果 Si≠Si−1 且 Si=Si+1,则 Si−1和 Si 也称为边缘字符。

其它的字符都不是边缘字符。

对于一个给定的串 S,一次操作可以一次性删除该串中的所有边缘字符(操作后可能产生新的边缘字符)。

请问经过 2^64 次操作后,字符串 S 变成了怎样的字符串,如果结果为空则输出 EMPTY

输入格式

输入一行包含一个字符串 S。

输出格式

输出一行包含一个字符串表示答案,如果结果为空则输出 EMPTY

数据范围

对于 25% 的评测用例,|S|≤10^3,其中 |S|表示 S的长度;
对于 50% 的评测用例,|S|≤10^4;
对于 75% 的评测用例,|S|≤10^5;
对于所有评测用例,|S|≤10^6,S 中仅含小写字母。

输入样例1:
edda
输出样例1:
EMPTY
输入样例2:
sdfhhhhcvhhxcxnnnnshh
输出样例2:
s

 思路:题目就是模拟删除符合边缘字符条件的字符

先看暴力的做法就是两层遍历,那么o(n^2)就会TLE,观察题目,暴力的两层循环是有很多冗余的判断次数,其实每次只需要判断被删除的字符左右两边的字符就行。

这里用两个vector数组w,q,分别代表待删和备选。因为长度总共为n,所以时间复杂度为3n。

带有注释的代码: 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;const int N = 1000010;
int l[N], r[N];     // 左右邻接关系数组
char s[N];           // 输入的字符串
vector<int> q, w;    // 辅助队列 q 用于存储待处理的节点,w 用于存储需要插入的节点
int n;               // 字符串长度
bool st[N];          // 记录节点是否已经处理过// 插入节点到待处理队列
void insert(int k) {if (!st[k]) {st[k] = true;w.push_back(k);}
}// 根据条件筛选待删除节点
void filter_del() {w.clear();for (int k : q) {int a = l[k], b = k, c = r[k];// 满足条件1:a和b相同,b和c不同,且c不是边界标记#if (s[a] == s[b] && s[b] != s[c] && s[c] != '#') {insert(b);insert(c);}// 满足条件2:a和b不同,b和c相同,且a不是边界标记#else if (s[a] != s[b] && s[b] == s[c] && s[a] != '#') {insert(a);insert(b);}}
}int main() {// 读取输入字符串cin >> s + 1;n = strlen(s + 1);// 处理字符串的边界情况s[0] = s[n + 1] = '#';// 初始化左右邻接数组和待处理队列for (int i = 1; i <= n; ++i) {l[i] = i - 1, r[i] = i + 1;q.push_back(i);}r[0] = 1, l[n + 1] = n;// 循环处理,直到没有待处理节点while (true) {filter_del();if (w.empty()) break;q.clear();for (int k : w) {int a = l[k], b = k, c = r[k];// 将未处理的左侧节点加入待处理队列,且不重复加入相同的节点if (!st[a] && a && (q.empty() || q.back() != a)) q.push_back(a);// 将未处理的右侧节点加入待处理队列if (!st[c] && c != n + 1) q.push_back(c);// 更新左右邻接关系,将节点b从链表中删除r[a] = c, l[c] = a;}}// 输出结果if (r[0] == n + 1)cout << "EMPTY";else {for (int i = r[0]; i != n + 1; i = r[i]) {cout << s[i];}}return 0;
}

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

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

相关文章

python爬虫实战——自动话获取淘宝商品数据

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: python 3.8 pycharm 专业版 三方库: DrissionPage >>> pip install DrissionPage 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) …

go语言(十九)---- channel

channel的使用 //1. 发送value到channelchannel <- value //2. 接收并将其丢弃<- channel //3. 从channel中接收数据&#xff0c;并将其赋值给x x : <- channel 例子 package mainimport "fmt"func main() {//定义一个channelc : make(chan int)go func…

【数据结构与算法】5.详解双向链表的基本操作(Java语言实现)

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

SpringBoot之时间数据前端显示格式化

背景 在实际我们通常需要在前端显示对数据操作的时间或者最近的更新时间&#xff0c;如果我们只是简单的使用 LocalDateTime.now()来传入数据不进行任何处理那么我们就会得到非常难看的数据 解决方式&#xff1a; 1). 方式一 在属性上加上注解&#xff0c;对日期进行格式…

LeetCode.42. 接雨水

题目 题目链接 分析 读完本题以及结合题目给出的图我们可以很直观的看到&#xff0c;这道题目是让我们求形成凹槽的面积。 我们可以针对每一个数字形成凹槽的面积进行计算&#xff0c;然后相加数组每一个数字形成凹槽的面积即可。 那么问题来了&#xff0c;怎么知道一个数…

【Java与网络6】实现一个自己的HTTP浏览器

前面我们讨论了HTTP协议的基本结构和Socket编程的基本原理&#xff0c;本文我们来整个大活&#xff1a;自己实现一个简单的浏览器。 目录 1.主线程循环体 2.readHostAndPort()方法的实现 3.readHttpRequest()方法的实现 4.sendHttpRequest()方法的实现 5.readHttpRespons…

深度强化学习(王树森)笔记03

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

STM32——创建HAL库工程

第一步 新建工程文件夹 所有文件夹存放的内容&#xff1a; 第二步 拷贝/新建工程相关文件 1、Drivers&#xff08;创建如下文件夹&#xff0c;除readme.txt&#xff09; 文件夹存放的内容&#xff1a; 2、Middlewares和output暂时不需要创建&#xff08;目前用不到&#x…

自动驾驶的决策层逻辑

作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 自动驾驶意味着决策责任方的转移 我国2020至2025年将会是向高级自动驾驶跨越的关键5年。自动驾驶等级提高意味着对驾驶员参与度的需求降低&#xff0c;以L3级别为界&#xff0c;低级别自动驾驶环境监测主体和决策责任方仍保留于驾驶…

华为配置在用户物理位置变化时部署业务随行示例(V200R006C00、V200R007C00、V200R008C00)

配置在用户物理位置变化时部署业务随行示例&#xff08;V200R006C00、V200R007C00、V200R008C00&#xff09; 业务随行简介配置注意事项组网需求需求分析数据规划配置思路操作步骤配置文件 组网图形 图1 组网图 业务随行简介配置注意事项组网需求需求分析数据规划配置思路操作步…

新建一个基于标准库的工程(STM32)

目录 1.新建存放工程的文件夹 2.打开KEIL5软件 3.新建一个本次工程的文件夹 4.添加工程的必要文件 4.1打开STM32的启动文件 ​编辑 4.2&#xff1a; 4.3添加内核寄存器文件 ​编辑 5.回到keil5软件&#xff0c;将刚才复制的那些文件添加到工程中 5.1添加一个启动文件&am…

浅谈WPF之样式与资源

WPF通过样式&#xff0c;不仅可以方便的设置控件元素的展示方式&#xff0c;给用户呈现多样化的体验&#xff0c;还简化配置&#xff0c;避免重复设置元素的属性&#xff0c;以达到节约成本&#xff0c;提高工作效率的目的&#xff0c;样式也是资源的一种表现形式。本文以一个简…

k8s-基础知识(Service,NodePort,CusterIP,无头服务,NameSpace,资源限制)

Node Node 是 Pod 真正运行的主机&#xff0c;可以是物理机&#xff0c;也可以是虚拟机。 Annotations 原文链接 Annotations 是 key/value 形式附加于对象的注解。不同于 Labels 用于标志和选择对象&#xff0c;Annotations 则是用来记录一些附加信息&#xff0c;用来辅助应…

x-cmd pkg | httpx - 为 Python 设计的下一代 HTTP 客户端库

目录 简介首次用户功能特点进一步探索 简介 HTTPX 是一个为 Python 设计的下一代 HTTP 客户端库&#xff0c;由 Tom Christie 创建。它提供了同步和异步的 API&#xff0c;并支持 HTTP/1.1 和 HTTP/2 协议。与 Requests 库类似&#xff0c;但增加了对异步请求的支持和 HTTP/2 …

MySql8的简单使用(1.模糊查询 2.group by 分组 having过滤 3.JSON字段的实践)

MySql8的简单使用&#xff08;1.模糊查询 2.group by 分组 having过滤 3.JSON字段的实践&#xff09; 一.like模糊查询、group by 分组 having 过滤 建表语句 create table student(id int PRIMARY KEY,name char(10),age int,sex char(5)); alter table student add height…

【TOP解刊】IEEE(trans)顶刊,国人绝对优势,同领域2个月录用,5天见刊!

工程技术类 • 顶刊解读 今天带来IEEE旗下工程技术领域顶刊&#xff0c;究竟这本高分期刊审稿情况如何呢&#xff1f;好投吗&#xff1f;一起来看看下文解析。如有投稿意向可重点关注&#xff0c;具体详情见下文&#xff1a; 01 期刊简介 IEEE Transactions on Power Electr…

FlashInternImage实战:使用 FlashInternImage实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

QDockWidget : 想要 top -> left -> rigt -> bottom 的布局实现

上图红圈中的实现&#xff0c;第一次想要实现&#xff0c;总会和想的不一样。 第一种情况 第二种情况 第三种情况 有时候为了达到一种效果&#xff0c;也算是煞费苦心了&#xff0c;且不说这个demo还是找的其他CSDN博主的&#xff0c;但是功夫不负有心人。 解决办法 先让 Doc…

[UI5 常用控件] 03.Icon, Avatar,Image

文章目录 前言1. Icon2. Avatar2.1 displayShape2.2 initials2.3 backgroundColor2.4 Size2.5 fallbackIcon2.6 badgeIcon2.7 badgeValueState2.8 active 3. Image 前言 本章节记录常用控件Title,Link,Label。 其路径分别是&#xff1a; sap.m.Iconsap.m.Avatarsap.m.Image 1…

01_ESP32 MicroPython开发环境搭建

一、工作原理 Python源代码->Python解释器(MicroPython)-->二进制代码(01010)-->硬件电路(ESP32)-->高低电平输出-->其他设备 二、准备工作&#xff1a; 硬件&#xff1a;ESP32开发版&#xff0c;有很多个版本可选&#xff0c;我这里用的是ESP-32开发板&…