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.mfbz.cn/a/573910.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

保护你的网站:了解5种常见网络攻击类型及其防御方法

随着互联网的迅猛发展&#xff0c;针对网站的各种类型的网络攻击随之增加&#xff0c;网络攻击事件层出不穷&#xff0c;由此&#xff0c;如何保护网站安全成为每个网站所有者的重要议题。在下面的内容中&#xff0c;我们将探讨5种常见网络攻击类型及其防御方法&#xff0c;以帮…

SNETCracker--超级弱口令检查工具简介

一、简介 SNETCracker 超级弱口令检查工具是一款Windows平台的弱口令审计工具&#xff0c;支持批量多线程检查&#xff0c;可快速发现弱密码、弱口令账号&#xff0c;密码支持和用户名结合进行检查&#xff0c;大大提高成功率&#xff0c;支持自定义服务端口和字典。 二、SNE…

常见内网系统网络结构及nginx代理配置

系统网络结构图及nginx配置 1.系统网络结构图2.Nginx网络配置2.1请求从互联网区访问到内网区2.2 请求从内网访问互联网 1.系统网络结构图 传统公司服务部署网络都会分区&#xff0c;应用都部署在内网区&#xff0c;请求通过dmz区转出内网与互联网发生交互。 结构图详解&#…

springCloud集成activiti5.22.0流程引擎

springCloud集成activiti5.22.0流程引擎 点关注不迷路&#xff0c;欢迎再访&#xff01; 精简博客内容&#xff0c;尽量已行业术语来分享。 努力做到对每一位认可自己的读者负责。 帮助别人的同时更是丰富自己的良机。 小编最近工作需要涉及到流程&#xff0c;由于网络上5.22版…

CHARLS轻松发二区,只用了COX回归模型 | CHARLS CLHLS CFPS 公共数据库周报(4.3)...

零基础CHARLS发论文&#xff0c;不容错过&#xff01; 长期回放更新指导&#xff01;适合零基础&#xff0c;毕业论文&#xff0c;赠送2011-2020年CHARLS清洗后的数据全套代码&#xff01; CHARLS公共数据库 CHARLS数据库简介中国健康与养老追踪调查(China Health and Retireme…

C++初阶学习第三弹——类与对象(上)——初始类与对象

前言&#xff1a; 在前面&#xff0c;我们已经初步学习了C的一些基本语法&#xff0c;比如内敛函数、函数重载、缺省参数、引用等等&#xff0c;接下来我们就将正式步入C的神圣殿堂&#xff0c;首先&#xff0c;先给你找个对象 目录 一、类与对象是什么&#xff1f; 二、类的各…

ArtNeRF、Attention Control、Pixel is a Barrier、FilterPrompt

本文首发于公众号&#xff1a;机器感知 ArtNeRF、Attention Control、Pixel is a Barrier、FilterPrompt ArtNeRF: A Stylized Neural Field for 3D-Aware Cartoonized Face Synthesis Recent advances in generative visual models and neural radiance fields have greatly …

【笔试训练】day11

1.游游的水果大礼包 思路&#xff1a; 枚举。假设最后的答案是x个a礼包&#xff0c;y个b礼包&#xff0c;得到一个式子&#xff1a;ansa*xb*y 我们可以枚举x的数量&#xff0c;这样就能变相的把y的求出来。呃这就是鸡兔同笼问题嘛 x最大的范围是多少呢&#xff1f;也就是a礼…

【CouchDB 与 PouchDB】

CouchDB是什么 CouchDB&#xff0c;全名为Apache CouchDB&#xff0c;是一个开源的NoSQL数据库&#xff0c;由Apache软件基金会管理。CouchDB的主要特点是使用JSON作为存储格式&#xff0c;使用JavaScript作为查询语言&#xff08;通过MapReduce函数&#xff09;&#xff0c;并…

面试二十二、跳表SkipLists

跳表全称为跳跃列表&#xff0c;它允许快速查询&#xff0c;插入和删除一个有序连续元素的数据链表。跳跃列表的平均查找和插入时间复杂度都是O(logn)。快速查询是通过维护一个多层次的链表&#xff0c;且每一层链表中的元素是前一层链表元素的子集&#xff08;见右边的示意图&…

day07 51单片机-18B20温度检测

18B20温度检测 1.1 需求描述 本案例讲解如何从18B20传感器获取温度信息并显示在LCD上。 1.2 硬件设计 1.2.1 硬件原理图 1.2.3 18B20工作原理 可以看到18B20有两根引脚负责供电&#xff0c;一根引脚负责数据交换。18B20就是通过数据线和单片机进行数据交换的。 1&#xf…

前端项目中使用插件prettier/jscodeshift/json-stringify-pretty-compact格式化代码或json数据

同学们可以私信我加入学习群&#xff01; 正文开始 前言一、json代码格式化-选型二、json-stringify-pretty-compact简单试用三、prettier在前端使用四、查看prettier支持的语言和插件五、使用prettier格式化vue代码最终效果如图&#xff1a; ![在这里插入图片描述](https://im…

【ruoyi-vue】登录解析(后端)

调试登录接口 进入实现类可以有 验证码校验 登录前置校验 用户验证 验证码校验 通过uuid获取redis 中存储的验证码信息&#xff0c;获取后对用户填写的验证码数据进行校验比对 用户验证 1.进入控制器的 /login 方法 2.进入security账号鉴权功能&#xff0c;经过jar内的流…

python逆向基础流程(纯小白教程)

一&#xff0c;例题链接 NSSCTF | 在线CTF平台 二&#xff0c;文件特征 使用工具查看文件信息&#xff0c;发现是pyinsatller打包的exe文件&#xff0c;如果硬用ida分析成汇编或c语言根本摸清楚程序的逻辑&#xff0c;所以思路是反编译成py文件直接分析python代码 三&#xf…

【论文推导】基于有功阻尼的转速环PI参数整定分析

前言 在学习电机控制的路上&#xff0c;PMSM的PI电流控制是不可避免的算法之一&#xff0c;其核心在于内环电流环、外环转速环的设置&#xff0c;来保证转速可调且稳定&#xff0c;并且保证较好的动态性能。整个算法仿真在《现代永磁同步电机控制原理及matlab仿真》中已详细给出…

VUE项目使用.env配置多种环境以及如何加载环境

第一步&#xff0c;创建多个环境配置文件 Vue CLI 项目默认使用 .env 文件来定义环境变量。你可以通过创建不同的 .env 文件来为不同环境设置不同的环境变量&#xff0c;例如&#xff1a; .env —— 所有模式共用.env.local —— 所有模式共用&#xff0c;但不会被 git 提交&…

Clickhouse离线安装教程

https://blog.51cto.com/u_15060531/4174350 1. 前置 1.1 检查服务器架构 服务器&#xff1a;Centos7.X 需要确保是否x86_64处理器构架、Linux并且支持SSE 4.2指令集 grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 …

不墨迹,向媒体投稿不讲攻略,直接上方法

作为一名单位信息宣传员,我曾深陷于向媒体投稿的泥沼之中,饱尝了费时费力、审核严苛、出稿缓慢的苦涩,承受着领导急切期盼与自我压力交织的煎熬。然而,当我有幸接触到智慧软文发布系统,这一切困境如同阴霾散去,取而代之的是便捷流畅的投稿流程,以及领导满意、团队轻松的工作氛围…

Java Swing游戏开发学习24

内容来自RyiSnow视频讲解 这一节讲的是Scrolling Message, Leveling Up, Damage Calculation滚动消息&#xff0c;升级&#xff0c;伤害计算。 伤害计算 玩家与怪的战斗&#xff0c;玩家对怪的伤害值为攻击值减去怪的防御值。 int damage attack - gp.monster[i].defense; …

队列的实现(c语言实现)

队列的定义 队列&#xff08;Queue&#xff09;是一种特殊的线性数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。这意味着最早被添加到队列中的元素将是最先被移除的元素。队列的主要操作包括入队&#xff08;enqueue…
最新文章