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[<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值