Module: 올바른 브라켓 시퀀스(PRS)


Problem

4 /6


PSP 세대

Theory Click to read/hide

올바른 대괄호 시퀀스의 생성은 검사가 수행되는 방식에서 직접 따릅니다. 정확성을 위반하지 않고 새 대괄호를 추가하기만 하면 됩니다. 이것은 재귀 반복에 의해 수행됩니다. 당신이 그를 모른다면 - BE ... 아, 아니, 더 읽어서 이해하려고 노력할 수 있습니다. 다음은 한 유형의 대괄호에 대한 코드 샘플입니다.
 

#include <벡터>
#include <iostream>

사용 네임스페이스 std;
정수 n; // 절반 길이 
벡터<문자> 답변 // 우리의 대답 

무효 rec(int 잔액) {
if (ans.size() == 2 * n) { // 만약 그렇다면, 우리는 완료 < /span>
for (int i = 0; i < 2 * n; i++)
cout << ans[i] << " ";
cout << "\n";
}
if (ans.size() + balance + 2 <= n * 2) { // 확인합니다. 새 여는 중괄호를 닫도록 하겠습니다 
// 이제 손을 조심하세요: 각 시퀀스에 대해 별도의 벡터를 만들 필요가 없습니다 
ans.push_back('(');
rec(잔액 + 1);
ans.pop_back(); // 이를 이해하려면 재귀에 대해 알아야 합니다. 먼저 벡터에 괄호를 추가한 다음 이 모든 코드를 다시 실행합니다. 
// 즉, 가능하면 괄호를 다시 추가합니다. 
// 이것은 재귀를 종료하기 시작할 때까지, 즉 원하는 길이에 도달할 때까지 발생합니다. 
// 그러면 괄호가 제거되기 시작합니다. 당신이 이것을 이해한다면-축하합니다. 당신은 굉장합니다. 
}
if (balance > 0) { // 괄호를 닫을 수 있으면 닫습니다. 
ans.push_back(')');
rec(균형 - 1);
ans.pop_back();
}
}

 int 메인()
{
cin>> N;
rec(0);

    반품 0;
}
그리고 이제 어려움의 시간입니다. 여러 유형의 괄호에 대한 알고리즘을 직접 작성해야 합니다! 무아하하하하하하하하하!

Problem

<사업부>

British Scientists, Inc.의 가장 혁신적인 개발 틸데-오메가-람다 미적분학(즉, 없음)을 사용하여 해결할 수 있는 모든 문제에 대한 솔루션을 찾는 방법입니다. 이를 위해 그들은 x 길이의 가능한 모든 괄호 시퀀스를 열거합니다. 여기서 x는 회사의 많은 개발에 사용되는 비밀 상수의 첫 번째 숫자입니다. x가 홀수이면 1을 추가합니다. 그런 다음 신경 언어 프로그래밍을 사용하는 고급 알고리즘과 피보나치 계산 구골드 카탈루냐 수를 사용하여 용어를 찾습니다. 그러나 이러한 알고리즘은 이미 구현되어 특허를 받았습니다. 

당신의 임무는 반복 알고리즘을 구현하는 것입니다. 


입력
입력은 비밀 상수의 첫 번째 숫자인 x(\(1 <= x <= 9\))입니다.  ;
 

출력
길이 x(또는 \(x \% 2 ==1\)인 경우 x+1)의 모든 범위를 출력해야 합니다. ) 사전순으로.

 

<헤드> <일># <몸>
입력 출력
1 1 <사업부>( ) <사업부>[ ]
{}