Codeforces Round #819 (Div. 1 + Div. 2) 补题 C

C. Jatayu's Balanced Bracket Sequence (思维题)

题意:给你一个平衡括号序列(符合书写规则),其任意子区间[i, j]如果是平衡子序列,就建立一条i,j之间的无权无向边,求最后建成的图里,图被分成了几块。
 
最开始,给出的序列是满足平衡的,且有n个括号对,假设每个括号对单独建边,所以最多有n个独立部分(每个括号对建边)。令ans = n,然后逐渐排除能连接在一起的部分。
 
让我们想一下:
...()... 这部分序列建成的图有几部分呢?
三部分,而且这几部分图永远也没办法连接在一起,整体可以看作一部分。可以仔细想想。
 
序列中每个相连的‘)’‘(’代表前一个部分序列的结束和后一部分序列部分的开始,同时这两部分分别构成的图可以连接起来,ans - 1;
 
 ac代码
复制代码
#include<bits/stdc++.h>
using namespace std;

void solve() {
    int n;
    cin >> n;
    string s;
    cin >> s;
    int ans = n;
    for(int i = 1; i < 2 * n; i ++) {
        if(s[i - 1] == ')' && s[i] == '(') ans --;
    }
    cout << ans << "\n";
}

int main()
{
    int t;
    cin >> t;
    while(t --) {
        solve();
    }
    
    return 0;
}
复制代码

 

posted @   Y2ZH  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示