ABC350 FG 题解

ABC350 FG 题解

本人 Unrated 在开始后 1h 参加,20 分钟过 F,1h 过 G。

F

Overview

唐,史上最水 F。

Description

有一个串 S S S,包含大小写字母,(),保证括号匹配。

对于每组匹配括号,从里往外翻转、改变大小写。

比如 ((A)y)x,可以先变成 (ay)x,再变成 YAx

求最终的 S S S

Solution

首先确定每个字母的大小写再分治翻转就行了。

类似中缀表达式的求解过程。

O ( n log ⁡ n ) O(n\log n) O(nlogn)

Code

void solve(int ll, int r){if(layer[r] & 1){int i = r;while(i >= ll){if(s[i] == ')'){solve(lst[i] + 1, i - 1), i = lst[i] - 1;}else cout << s[i], i--;}}else{int i = ll;while(i <= r){if(s[i] == '('){solve(i + 1, nxt[i] - 1), i = nxt[i] + 1;}else cout << s[i], i++;}}
}void solve(int testcase, ...){init_vars();cin >> s;stack<int> st;for(int i = 0; i < s.length(); i++){if(i) layer[i] = layer[i - 1];if(s[i] == '(') st.push(i), layer[i]++;else if(s[i] == ')'){nxt[st.top()] = i, lst[i] = st.top(), st.pop(); layer[i]--;}else{if(layer[i] & 1){if(s[i] >= 'a') s[i] = s[i] - 'a' + 'A';else s[i] = s[i] - 'A' + 'a';}}}solve(0, s.length() - 1);
}

G

Overview

唐,史上最水 G。

Description

给出 n n n 个点, m m m 个操作, q q q 个操作如下:

  • 1 x y 加边操作;
  • 2 x y z z z,满足存在 ( x , z ) (x,z) (x,z) ( y , z ) (y,z) (y,z),没有输出 0

保证操作后的图是一个森林

Solution

如果记录每个点的父亲 f x f_x fx,那么可以通过以下方法查询:

  • 如果 z z z 是两个点的共同父亲,那么 f x = f y = z f_x=f_y=z fx=fy=z
  • 如果 z z z 是两个点的中间层,令 x x x 为更深的点,那么 f f x = y f_{f_x}=y ffx=y,答案为 f x f_x fx

合并操作需要更新至少一个子树的 f f f,用启发式合并(按秩合并)即可。

O ( n log ⁡ n ) O(n\log n) O(nlogn)

题外话:原来的程序 TLE,本人通过计算理论复杂度和实际计算次数算出了问题。

Code

void dfs(int u, int fat){
//	cout << u << " " << fat << endl;
//	tott++;fa1[u] = fat;for(auto v : gv[u]){if(v == fat) continue;dfs(v, u);}
}int FindFather(int x){if(fa[x] == x) return x;return fa[x] = FindFather(fa[x]);
}
void Union(int u, int v){u = FindFather(u), v = FindFather(v);if(u == v) return;sz[u] += sz[v];fa[v] = u;
}void solve(int testcase, ...){init_vars();int n, q; scanf("%lld%lld", &n, &q);for(int i = 1; i <= n; i++) fa[i] = i, fa1[i] = 0, sz[i] = 1;int tot = 0, lst = 0;for(int i = 1; i <= q; i++){int a, b, c; scanf("%lld%lld%lld", &a, &b, &c);a = 1 + (((a * (1 + lst)) % 998244353) % 2);b = 1 + (((b * (1 + lst)) % 998244353) % n); c = 1 + (((c * (1 + lst)) % 998244353) % n);
//		cout << a << " " << b << " " << c << endl;if(a == 1){if(sz[FindFather(b)] > sz[FindFather(c)]) swap(b, c);
//			cout << b << " " << c << endl;tott = 0;dfs(b, c);
//			cout << tott << " " << sz[b] << endl;Union(c, b);gv[b].push_back(c);gv[c].push_back(b);}else{
//			for(int j = 1; j <= n; j++) cout << sz[FindFather(j)] << " ";
//			cout << endl;if(fa1[fa1[b]] == c) lst = fa1[b], printf("%lld\n", fa1[b]);else if(fa1[fa1[c]] == b) lst = fa1[c], printf("%lld\n", fa1[c]);else if(fa1[b] == fa1[c] && fa1[b]) lst = fa1[b], printf("%lld\n", fa1[b]);else lst = 0, printf("0\n");tot++;}
//		if(tott > 30000000) return;}
}

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

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

相关文章

vue3的getCurrentInstance获取当前组件实例

vue3的setup中没有this时需要使用getCurrentInstance()来获取。 在 Vue 3 中&#xff0c;getCurrentInstance 方法可以在组合式 API&#xff08;Composition API&#xff09;中获取当前组件实例。这个方法返回一个包含了组件实例的对象&#xff0c;你可以用它来访问组件的 pro…

详解MySQL C API 相关接口(大白话就是:MySQL的c语言怎么写)

文章目录 1、C API 官方文档2、初始化 MYSQL3、连接 MySQL设置连接字符集&#xff08;使得客户端编码方式匹配&#xff09; 4、下发 mysql 指令5、获取 mysql 查询结果(保存起来)获取行与列遍历存储结果 6、释放 MYSQL\_RES 对象7、关闭 MySQL 连接8、总结 1、C API 官方文档 …

动态规划---斐波那契数列模型

目录 一、斐波那契数列的基本概念 二、动态规划在斐波那契数列中的应用与优势 三、实际案例&#xff1a;使用动态规划解决斐波那契数列问题 四、动态规划问题的做题步骤 五、例题 1、第N个泰波那契数---点击跳转题目 2、三步问题----点击跳转题目 3、最小花费爬楼梯---…

FANUC机器人socket通讯硬件配置

一、添加机器人选配包 Fanuc机器人要进行socket通讯&#xff0c;需要有机器人通讯的选配包&#xff0c;1A05B-2600-R648 User Socket Msg&#xff0c;1A05B-2600-R632 KAREL&#xff0c;1A05B-2600-R566 KAREL Diagnostic&#xff0c;1A05B-2600-J971 KAREL Use Sprt FCTN。 二…

【漏洞复现】WebLogic XMLDecoder反序列化(CVE-2017-10271)

1、漏洞描述 CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务&#xff0c;其中使用了XMLDecoder来解析用户传入的XML数据&#xff0c;在解析的过程中出现反序列化漏洞&#xff0c;导致可执行任意命令。攻击者发送精心构造的xml数据甚至能…

SpringMvc中的异常处理器(在SpringBoot中也可使用)

目录 一、单个控制器异常处理 二、全局异常处理器 三、自定义异常处理器 在开发过程中&#xff0c;Dao&#xff0c;service&#xff0c;Controller层代码出现异常都可能抛出异常。如果哪里产生异常就在哪里处理异常&#xff0c;则会降低开发效率。所以一般情况下我们会让异常…

clickhouse数据去重函数介绍(count distinct)

非精确去重函数&#xff1a;uniq、uniqHLL12、uniqCombined 精确去重函数&#xff1a;uniqExact、groupBitmap 测试数据量&#xff1a;2000w 结论&#xff1a; 1.整形值精确去重场景&#xff0c;groupBitmap 比 uniqExact至少快 2x 2.groupBitmap仅支持无符号整形值去重&#x…

文化旅游3D数字孪生可视化管理平台推动文旅产业迈向更加美好的未来

随着数字化、智能化管理成为文旅产业发展的必然趋势&#xff0c;数字孪生公司深圳华锐视点创新性地推出了景区三维可视化数字孪生平台&#xff0c;将线下的实体景区与线上的虚拟世界完美融合&#xff0c;引领智慧文旅新潮流。 我们运用先进的数字孪生、web3D开发和三维可视化等…

【Bug记录】@RequestBody参数属性为空的问题

1、问题发生背景 使用postman调用之前测试成功的接口&#xff0c;再进行项目拆分&#xff0c;重构之后&#xff0c;接口突然不通了&#xff0c;排查了很久&#xff0c;以为是框架调整&#xff0c;导致出了问题。 2、问题发生的原因 经过一系列的排查&#xff0c;排查详细过程就…

linux内核网络源码-用户空间与内核的接口

内核通过各种不同的接口把内部信息输出到用户空间&#xff0c;除了程序员用于请求特定信息的经典系统调用外&#xff0c;还有三个特殊接口&#xff0c;而其中两个是虚拟文件系统&#xff1a; procfs 文件系统 这是一个虚拟文件系统&#xff0c;通过是挂在proc ,允许内核以文件的…

详解Qt中的鼠标事件

在Qt中&#xff0c;处理鼠标事件是构建交互式界面的关键。Qt提供了一系列与鼠标相关的事件处理函数&#xff0c;允许开发者捕获鼠标的各种动作&#xff0c;如按下、释放、移动、双击等。以下是鼠标事件的使用方法、技巧以及注意事项&#xff0c;并附带C代码示例。 基础使用方法…

GDB多线程调试:Redis的IO多线程

Redis采用的网络模型是单线程的Reactor网络模型&#xff0c;异步处理&#xff0c;因为性能很高。 Reactor先从客户端获取请求&#xff0c;然后dispatch给具体的执行的线程。处理的流程即为read->decode->compute->encode->send。 而Redis的IO多线程的处理时&…

【C++】:拷贝构造函数和赋值运算符重载

目录 一&#xff0c;拷贝构造函数1. 什么是拷贝构造函数2. 拷贝构造函数的特性3. 实践总结 二&#xff0c;赋值运算符重载2.1 运算符重载2.2 赋值运算符重载 一&#xff0c;拷贝构造函数 1. 什么是拷贝构造函数 拷贝构造函数是特殊的构造函数。是用一个已经存在的对象&#x…

什么是哈希表

为了解力扣第一题自学哈希表&#xff0c;做总结。 哈希函数的原理&#xff1a; 如果输入一个参数&#xff0c;那么哈希函数就会输出一个数字&#xff0c;并且不同的输入会有不同的输出&#xff0c;相同的输入会有相同的输出。例如&#xff1a; 苹果————89 苹果————…

SAP采购订单-条件类型-配置开发步骤

由于采购业务变更&#xff0c;需要创建新的价格类型&#xff0c;并添加新的计算逻辑计算。首先在例程&#xff08;VOFM&#xff09;中创建计算逻辑&#xff0c;然后在系统配置&#xff08;SPRO&#xff09;中找到配置点&#xff0c;创建新的条件类型‘ZMM00’,创建定价过程‘ZM…

SpringCloud系列(16)--将服务提供者Provider注册进Zookeeper

前言&#xff1a;在上一章节中我们说明了一些关于Eureka自我保护模式&#xff0c;而且自上一章节起关于Eureka的知识已经讲的差不多了&#xff0c;不过因为Eureka已经停更了&#xff0c;为了安全考虑&#xff0c;我们要用还在更新维护的注册中心来取代Eureka&#xff0c;而本章…

Flink面试(2)

Flink面试&#xff08;1&#xff09;-CSDN博客 9. Flink 状态如何存储&#xff1f; 在 Flink 中&#xff0c;状态存储 被叫做 StateBackend&#xff0c;它具备两种能力&#xff1a; 在计算过程中提供访问 State 能力&#xff0c;开发者在编写业务逻辑中能够使用 StateBacken…

Python IO流

1.什么是IO&#xff1f; IO&#xff08;输入/输出&#xff09;是计算机程序与外部世界进行数据交换的一种方式。在Python中&#xff0c;IO操作通常涉及文件、网络、标准输入和输出等。Python的IO操作可以分为两种类型&#xff1a;文本IO和二进制IO。 文本IO&#xff1a;用于读…

网络数据包嗅探器工具

组织的网络非常庞大&#xff0c;包含服务器、交换机、路由器和接入点等众多节点&#xff0c;由于许多资源和流量不断通过这些节点&#xff0c;因此很难确定大量流量是真实的还是安全攻击的迹象&#xff0c;了解和了解组织的网络流量至关重要&#xff0c;一个有用的资源是网络数…

MySQL--mysql的安装(压缩包安装保姆级教程)

官网下载&#xff1a;www.mysql.com MySQL :: Download MySQL Community Server (Archived Versions) 1.MySQL下载流程&#xff1a; 第一步&#xff1a;点击download&#xff0c; 下滑找到MySQL community&#xff08;gpl&#xff09;Downloads>> 第二步&#xff1a;点…