「WHOI-1」ymh 是 AK 哥!!!
题目背景
2077 2077 2077 年春。 15 15 15 岁的 miku 正在对着你谷发呆,突然看到一个奇怪的问题,你能帮帮他么??
你要先学会一些定义。
我们约定一个字符串下标从 1 1 1 开始, s [ l , r ] s[l,r] s[l,r] 表示 s l s l + 1 … s r s_ls_{l+1}\dots s_r slsl+1…sr 拼接成的一个字符串。
定义括号匹配串如下:
- 空串是括号匹配串。
- 如果 A A A 是括号匹配串,则 ( A ) (A) (A) 是括号匹配串。
- 如果 A , B A,B A,B 是括号匹配串,则 A B AB AB 是括号匹配串。
括号匹配前缀长度是指最大的 k k k 使得 s [ 1 , k ] s[1,k] s[1,k] 是一个括号匹配串。
比如:
- s = (())(() s=\text{(())(()} s=(())(() 时括号匹配前缀长度是 4 4 4。
- s = ()()()(()))( s=\text{()()()(()))(} s=()()()(()))( 时括号匹配前缀长度是 10 10 10。
题目描述
给你一个括号串 s s s。定义一次操作是交换他们当中相邻的两个字符。
你的任务是找出若干次操作后 s s s 的括号匹配前缀长度最大值。
输入格式
一行一个正整数 n n n 表示字符串长度。
接下来一行一个字符串表示 s s s。
输出格式
一行一个自然数表示答案。
样例 #1
样例输入 #1
3
(()
样例输出 #1
2
样例 #2
样例输入 #2
2
()
样例输出 #2
2
提示
本题采用 Subtask \texttt{Subtask} Subtask 计分方式,只有通过该 Subtask \texttt{Subtask} Subtask 的所有测试点才能得到该点的分数。
Subtask \texttt{Subtask} Subtask 编号 | 特殊限制 | 分值 |
---|---|---|
1 | 只含左括号或只含右括号 | 2 |
2 | n ≤ 2 n \leq 2 n≤2 | 3 |
3 | n ≤ 10 n \leq 10 n≤10 | 10 |
4 | n ≤ 1000 n \leq 1000 n≤1000 | 20 |
5 | 无 | 65 |
对于 100 % 100\% 100% 的数据,保证 $ 1\leq n\leq10^6$。
Scratch实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XWkoq3G6-1722085611848)(https://i-blog.csdnimg.cn/direct/e5a85870067b481a961df993732c7ee5.png)]
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容