창사 대학 프로그래밍 콘테스트 E의 2019-2020 "새로운 인종은"합법적 인 제목을 괄호

제목 설명 

우리 모두 알다시피, 좋은 하나님은 강한 팀 훈련, 그는 종종 그가 다시 온 날, 그는 PC 타이틀을 던졌다 대부분의 요리 팀 PC를 멸시 좋아입니다 :

당신에게 '('및 ')', 우리는 괄호 주변 사람들 괄호 완벽한 문자열을 하나의 문자열 하나에 될 수 있습니다 전화에만 문자가 포함 된 문자열을 지정

예 : "() () ()", "((()))", "((())) () ()는"완벽한 문자열

그리고 "((())", "() (", "((())) () ("완벽하지 문자열입니다.

그래서 어려운 주제는 물론, 쓰기에 PC가 아니라 그가 당신에게, 영리한 ACMer 아를 발견 그래서 그는 멸시 좋은 주님되고 싶어하지 않았다, 당신은이 문제에게 PC를 해결하는 데 도움이

설명을 입력합니다 :

제 라인 정수 N, 대표 길이의 문자열 N, 1 <= N <= 1E5 

번째 행의 문자열의 문자열, 문자만을 포함 '(', ')'.

출력 설명 :

문자열이 출력 YES를 완벽하게 문자열 인 경우. 그렇지 않으면 출력 NO
예 1

기입

4
(())

수출

YES 

아이디어 : 일치하는 괄호, 중괄호 먼저, 질문의 의미를 충족하지 않더라도에도, 확실히 직접 NO의 출력 끝과 일치 할 수 있지 않은 다음 N을 결정하기 위해 동일에 대해해야합니다.
그렇지 않으면, 왼쪽 브래킷 다음 기록에 오른쪽 대괄호의 수, 그리고 오른쪽 괄호의 숫자는 왼쪽 브래킷보다 큰 경우 오른쪽 괄호가, 여는 괄호보다 큰지 여부를 결정하기 위해 각 레코드,
다음 확실히 거기에 맞게 해당하는 왼쪽 괄호가없는, 그리고 마지막으로 판정되면 경우 좌우 브래킷 동수, 출력 YES 달리 출력 NO
#INCLUDE <비트 / stdc ++. H>
네임 스페이스를 사용하여 표준;
() 주요 int로
{
    INT N;
    숯불이 [100100];
    CIN >> N;
    getchar가 (); // Enter를 읽기
    대해 INT (I = 0; I N <; 나는 ++) {
        scanf와 ( "%의 C ', A [I]);
    }
    당신 L = 0, R = 0;
    (N % 2! = 0) {만약
        COUT << "NO"<< ENDL;
    }
    다른 {
        대해 INT (I = 0; I N <; 나는 ++) {
            경우 (a [I] == '(') {
                리터 ++;
            }
            다른 경우 (a [I] == ')') {
                R ++;
            }
            (L <R) {//이 과정에서 오른쪽 대괄호의 수는 왼쪽 괄호보다 큰 경우, 확실히 성공 일치하는 경우
                COUT << "NO"<< ENDL;
                0을 반환;
            }
        }
        경우 (L == R) {
            COUT << "YES"<< ENDL;
        }
        다른 {
            COUT << "NO"<< ENDL;
        }
    }
    0을 반환;
}

  

라인의 질문의 의미는 무엇입니까



추천

출처www.cnblogs.com/clb123/p/12045934.html