华为OD机试 - 字符串化繁为简 (c++并查集)

2023-11-11

 

#include <iostream>
#include <vector>
#include <deque>
#include <string>
using namespace std;

// 定义并查集类
class UnionFindSet {
public:
    vector<int> fa; // 存储每个节点的父节点
    int count; // 当前连通块的数量

    UnionFindSet(int n) : count(n) { // 构造函数,初始化父节点为自身
        fa.resize(n);
        for (int i = 0; i < n; i++) fa[i] = i;
    }

    int find(int x,int mnum) { // 查找节点的根节点
        if (x != fa[x]) {
            fa[x] = find(fa[x],min(mnum,fa[x])); // 路径压缩
        }
        fa[x]=min(mnum,fa[x]);
        return fa[x];
    }

    void unionSet(int x, int y) { // 合并两个节点所在的连通块
        int x_fa = find(x,fa[x]);
        int y_fa = find(y,fa[y]);

        if (x_fa != y_fa) { // 如果两个节点不在同一个连通块中,则合并
            
            fa[max(x_fa,y_fa)] = min(x_fa,y_fa); // 将y所在的连通块合并到x所在的连通块中
            count--; // 连通块数量减1
        }
    }
};

int main() {
    
    UnionFindSet s(150);
    vector<int> is(150,0); 
    string str;
    deque<int> q1,q2;
    cin >> str;
    int temp=0;
    for(char c:str){
        if(c=='('){
            temp=1;
        }
        else if(c==')'){
            temp=0;
            int i;
            if(!q2.empty()){
                i=q2.front();
            }
            while(!q2.empty()){
                s.unionSet(i, q2.front());
                is[q2.front()]=1;
                if(q2.front()>='a'){
                    if(is[q2.front()-'a'+'A']==1)
                        s.unionSet(q2.front()-'a'+'A', q2.front());
                    
                }
                else{
                    if(is[q2.front()+'a'-'A']==1)
                        s.unionSet(q2.front()+'a'-'A', q2.front());
                }
                q2.pop_front();
            }
        }
        else if(temp==0){
            q1.push_back(c);
        }
        else{
            q2.push_back(c);
        }
    }
    if(q1.empty())
        cout <<0;
    while(!q1.empty()){
        
        cout << char(s.find(q1.front(),q1.front()));
        q1.pop_front();
    }
    
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD机试 - 字符串化繁为简 (c++并查集) 的相关文章

  • -ffast-math 可以安全地用于典型项目吗?

    在回答我建议的问题时 ffast math 有评论指出这是危险的 我个人的感觉是 在科学计算之外 是可以的 我还假设严肃的金融应用程序使用定点而不是浮点 当然 如果你想在你的项目中使用它 最终的答案是在你的项目上测试它 看看它有多大影响 但
  • 集群():是否可以仅检查文件是否已锁定,而不实际获取锁定(如果没有)?

    我的用例如下 我有一个程序 它强制在任何给定时间只能运行它的一个实例 因此在启动时它总是尝试在标准位置获取锁定文件 并在该文件终止时终止已经被锁定 这一切都工作正常 但现在我想用一个新的命令行选项来增强程序 当指定该选项时 将导致程序只打印
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 为类型列表创建别名并将其作为模板参数传递

    我正在使用可变参数模板来实现访问者模式 template
  • 如何将 dll 中包含的组件嵌入到 exe 中,以便它可以从内存运行?

    我正在尝试制作一个必须从内存运行的程序 通过Assembly Load bin 如上所述here http www codeproject com Articles 13897 Load an EXE File and Run It fro
  • 使用c#在mac上启动外部进程

    我成功地使用 System Diagnostics Process Start 在 Windows 上启动我的外部单声道可执行文件 然而在mac上却失败了 我没有收到任何错误 只是什么也没发生 我尝试按以下方式进行操作 System Dia
  • 为什么 xcode IDE 认为 `friend` 是保留字

    我一直在开发一个个人项目 并在我创建的新类中包含以下代码 property readonly getter isFriend BOOL friend 它似乎没有任何问题 当我构建它时 它可以编译得很好 但是当我们在xcode IDE看起来像
  • 我应该使用字节还是int?

    我记得曾在某处读到 即使您只需要字节 使用 Int32 更好 就性能而言 它 据说 仅适用于您不关心存储的情况 这是有效的吗 例如 我需要一个保存一周中某一天的变量 我是吗 int dayOfWeek or byte dayOfWeek E
  • 在 C++ 中,为什么 const 也可以工作时编译器选择非常量函数? [复制]

    这个问题在这里已经有答案了 例如 假设我有一堂课 class Foo public std string Name m maybe modified true return m name const std string Name cons
  • 将两个垂直滚动条相互绑定

    我在控件中有两个 TextBox 并且它们都有两个 VerticalScrollBar 我想在它们之间绑定 VerticalScrollBars 如果一个向上 第二个也会向上等等 如果可以的话我该怎么做 Thanks 不是真正的绑定 但它有
  • C 编程中的 rand() 问题? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我总是用 rand 得到相同的随机数序列 https stackoverflow com questions 1108780 why do i always get the same seque
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 如何通过分解 y 轴来减小 mschart 的高度

    如何降低 mschart 的高度 如下所示 编辑 就我而言 我不想查看中断图表 this chart1 ChartAreas 0 AxisY ScaleBreakStyle Enabled false 您似乎正在寻找AxisY ScaleB
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 如何检查日期时间是否发生在今天?

    有没有比下面的代码更好的 net 方法来检查 今天 是否发生了 DateTime if newsStory WhenAdded Day DateTime Now Day newsStory WhenAdded Month DateTime
  • asio::this_coro::executor 的实现是什么

    在协程函数中 我们可以添加auto ex co await asio this coro executor 获取该协程的执行者 但当我想了解它的定义时 我发现了这个 Awaitable type that returns the execu
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas
  • C 中的等效 plpgsql 触发器

    我有一个 PostgreSQL 9 0 服务器 并且在某些表上使用继承 因此我必须通过如下触发器模拟外键 CREATE OR REPLACE FUNCTION othertable before update trigger RETURNS
  • 如何正确处置注入的DLL线程?

    我将一个 DLL 注入到目标进程中 以在玩 MMORPG 时充当助手 当前功能将按键转换为鼠标点击 因为 MMORPG 要求用户移动鼠标才能实现某些功能 这是我所鄙视的 假设我出于某种原因想要取消注入 DLL 我该怎么做呢 这个方法干净吗

随机推荐

  • 生成新的数据列:使用R语言进行数据处理

    生成新的数据列 使用R语言进行数据处理 在数据分析和统计建模中 我们经常需要对现有数据进行处理和转换 以生成新的数据列来满足分析需求 R语言是一种功能强大的数据分析和统计建模工具 提供了各种函数和技术来处理数据 本文将介绍如何使用R语言生成
  • BSD协议和FreeBSD

    BSD协议 开放分类 BSD 协议 开源 BSD是 Berkely Software Distribution 的缩写 意思是 伯克利软件发行版 显然 BSD这个名称并不是我们现在所理解的操作系统 而且其原意也并非简单的操作系 统 而是一整
  • 通过smtplib和email发送验证码到电子邮箱(Python3.7.X)

    使用前需要在发送方的邮箱里开启POP3 SMTP服务 这里以QQ邮箱为例 设置 账户 开启服务 获得授权码 以下案例模拟发送一串纯文本的6位数字验证码 比较简单易懂 可在此基础上再完善 效果演示 代码展示 coding utf 8 impo
  • JSON.stringify 语法实例讲解

    语法 JSON stringify value replacer space value 是必选字段 就是你输入的对象 比如数组 类等 replacer 这个是可选的 它又分为2种方式 一种是数组 第二种是方法 情况一 replacer为数
  • 给打包文件的加上时间或者版本号

    const Version new Date getTime output path config build assetsRoot publicPath http www baidu com 修改 https iv admin 这部分为你
  • python运行代码不显示warning输出

    两种方法可以在python运行代码的时候不显示warning输出 方法1 import warnings warnings filterwarnings ignore 方法2 python W ignore run py
  • CGAL 快速构建三维凸包

    目录 一 三维凸包 二 代码实现 三 结果展示 四 结论 一 三维凸包 和二维凸包类似 给定一堆三维空间中的点 包含它们的最小凸多面体称为这些点的凸包 二 代码实现 include
  • java求两个数的最大公约数和最小公倍数

    解题思路 1 求最大公约数用辗转相除法 将较大的那个数对较小的那个数取余 如果a gt b 那就a b 取余得出的结果为下次运算的除数 上面较小的那个数将作为被除数 直到运算到较小为0时 返回较大的数 这个数就是最大公约数 2 最小公倍数就
  • 二十九、springBoot的监控和管理

    Spring Boot包含很多其他的特性 它们可以帮你监控和管理发布到生产环境的应用 你可以选择使用HTTP端点 JMX或远程shell SSH或Telnet 来管理和监控应用 审计 Auditing 健康 health 和数据采集 met
  • Linux——UDP协议及其编程流程

    UDP协议的特点 UDP 不提供可靠性的传输 它只是把应用程序传给 IP 层的数据报发送出去 但是并不能保证它们能到达目的地 由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接 且没有超时重发等机制 故而传输速度很快 无连接 不
  • 计算机网络-传输层(TCP协议特点和TCP报文段格式,TCP连接管理)

    文章目录 1 TCP协议特点 报文段格式 2 TCP连接管理 1 TCP协议特点 报文段格式 TCP是面向连接 虚连接 的传输层协议 每一条TCP连接只能有两个端点 每一条TCP连接只能是点对点的 TCP提供可靠交付的服务 无差错 不丢失
  • C++中的vector 利用swap去除多余容量

    以下内容主要参考博客 https baijiahao baidu com s id 1610227871099894962 wfr spider for pc 摘抄博客内容 如下 在使用C 中的 vector的时候 vector的申请的内存
  • CSS 样式的 initial(默认)和 inherit(继承)以及 unset

    经常会碰到 问一个 CSS 属性 例如 position 有多少取值 通常的回答是 static relative absolute 和 fixed 当然 还有一个极少人了解的 sticky 其实 除此之外 CSS 属性通常还可以设置下面几
  • 今天开始维护个人技术博客

    快下班了才写 从零开始 不管以后技术做到哪种程度 有个记录的习惯总是好的 一起加油 April
  • 1.cJSON使用的API简介笔记

    JSON JavaScript Object Notation JS 对象简谱 是一种轻量级的数据交换格式 它基于 ECMAScript 欧洲计算机协会制定的js规范 的一个子集 采用完全独立于编程语言的文本格式来存储和表示数据 简洁和清晰
  • 使用 cli(脚手架)构建一个vue.js程序

    1 通过cli工具初始化一个以Webpack为模板 项目名称为demo view的项目 2 通过上面步骤生成了项目结构 通过cd命令进入该项目的根目录 然后使用npm install命令安装项目需要的插件 3 使用npm run dev命令
  • 最好用的 6 款 Vue 实时消息提示通知(Message/Notification)组件推荐与测评

    本文完整版 最好用的 6 款 Vue 实时消息提示通知 Message Notification 组件推荐与测评 Vue 实时消息提示通知 Vue notification 专注实时消息提示 各类样式随意修改 你想要的它都有 SweetAl
  • MySQL 数据量太大怎么提升查询性能?

    比如随着业务的发展 订单表的数据量越来越大 这个时候查询变慢了 我们可以采取什么措施来提升查询性能呢 1 存档历史数据 当单表的订单数据太多 多到影响性能的时候 首选的方案是 归档历史订单 所谓归档 其实也是一种拆分数据的策略 简单地说 就
  • JS 点击气泡卡片自身外的区域自动关闭的代码逻辑

    Vue HTML
  • 华为OD机试 - 字符串化繁为简 (c++并查集)

    include