1 条题解

  • 0
    @ 2026-9-23 22:07:08

    题面

    题目传送门

    思路

    其实这道题很抽象,因为它根本没告诉你这个深度怎么算。

    再看一眼数据范围:n≤106n\le 10^6,模拟也不行了。怎么做呢?

    我们发现当有一个单独的左括号时,深度会加一,当有一个单独的右括号时,深度会减一。

    借助这个发现,这个题就很简单了。只要我们读入一个字符,当这个字符是左括号时,深度加 11。如果读入这个左括号后,深度超过了限制,那就把深度减 22。当这个字符是右括号时,深度加 11,如果读入这个右括号后,深度小于 00,那就把深度加 22。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int ans,sum,n,m;
    char a;
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;i++){
    		cin>>a;
    		if(a=='('){
    			sum++;
    			if(sum>m){
    				sum-=2;
    				ans++;
    			}
    		}
    		if(a==')'){
    			sum--;
    			if(sum<0){
    				sum+=2;
    				ans++;
    			}
    		}
    	}
    	cout<<ans<<endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    7134
    时间
    3000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者