結果
| 問題 | No.3503 Brackets Stack Query 2 |
| コンテスト | |
| ユーザー |
sig_256
|
| 提出日時 | 2026-04-18 22:42:53 |
| 言語 | C++17(gcc12) (gcc 12.4.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 682 ms / 2,000 ms |
| コード長 | 1,175 bytes |
| 記録 | |
| コンパイル時間 | 2,483 ms |
| コンパイル使用メモリ | 74,748 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-04-18 22:43:59 |
| 合計ジャッジ時間 | 27,741 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 30 |
ソースコード
#include <iostream>
#include <vector>
std::string T;
std::vector<int> stick = {true};
int height = 0, i = 0, valid_len = 0;
void push(char c) {
switch(c) {
case '|':{
if (!stick[height]) {
stick[height] = true;
valid_len ++;
}
break;
}
case '(':{
height ++;
if (stick.size() == height) {
stick.push_back(false);
}
stick[height] = false;
valid_len ++;
break;
}
case ')':{
if (height > 0 && stick[height]) {
valid_len ++;
height --;
}
break;
}
}
}
void pop() {
switch(T.back()) {
case '|':{
stick[height] = false;
break;
}
case '(':{
height --;
break;
}
case ')':{
height ++;
stick[height] = true;
break;
}
}
valid_len --;
}
bool op(int type, char c = 0) {
switch(type) {
case 1:{
if (i <= valid_len) {
push(c);
}
T += c;
i ++;
break;
}
case 2:{
if (i <= valid_len) {
pop();
}
T.pop_back();
i --;
break;
}
}
return height == 0 && i == valid_len;
}
int main() {
int Q;
std::cin >> Q;
while(Q--) {
int type;
char c = 0;
std::cin >> type;
if (type == 1) std::cin >> c;
puts(op(type, c) ? "Yes" : "No");
}
}
sig_256