結果

問題 No.1328 alligachi-problem
ユーザー 夜
提出日時 2020-12-25 01:37:04
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 4,778 bytes
コンパイル時間 1,225 ms
コンパイル使用メモリ 103,560 KB
実行使用メモリ 7,512 KB
最終ジャッジ日時 2023-10-21 16:07:52
合計ジャッジ時間 6,025 ms
ジャッジサーバーID
(参考情報)
judge14 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,348 KB
testcase_01 AC 2 ms
4,348 KB
testcase_02 AC 1 ms
4,348 KB
testcase_03 AC 2 ms
4,348 KB
testcase_04 WA -
testcase_05 WA -
testcase_06 AC 3 ms
4,348 KB
testcase_07 WA -
testcase_08 AC 3 ms
4,348 KB
testcase_09 WA -
testcase_10 AC 86 ms
6,164 KB
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 AC 85 ms
6,296 KB
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 AC 80 ms
6,164 KB
testcase_24 AC 101 ms
7,512 KB
testcase_25 AC 82 ms
6,268 KB
testcase_26 AC 105 ms
7,512 KB
testcase_27 AC 106 ms
7,512 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cmath>
#include <stdio.h>
#include <queue>
#include <deque>
#include <cstdio>
#include <set>
#include <map>
#include <bitset>
#include <stack>
#include <cctype>
using namespace std;
char c[200020], x[200020];
int y[200020];
vector<int> ans;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> bb, br, rb, rr;
int main() {
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> c[i] >> x[i] >> y[i];
		if (c[i] == 'B' && x[i] == 'B') {
			bb.push(make_pair(y[i], i + 1));
		}
		if (c[i] == 'B' && x[i] == 'R') {
			br.push(make_pair(y[i], i + 1));
		}
		if (c[i] == 'R' && x[i] == 'B') {
			rb.push(make_pair(y[i], i + 1));
		}
		if (c[i] == 'R' && x[i] == 'R') {
			rr.push(make_pair(y[i], i + 1));
		}
	}
	int b = 0, r = 0;
	while (!bb.empty()) {
		pair<int, int> p = bb.top();
		if (p.first == b) {
			ans.emplace_back(p.second);
			b++;
			bb.pop();
		}
		else {
			if (p.first < b) {
				cout << "No" << endl;
				return 0;
			}
			else {
				while (p.first > b) {
					if (br.empty()) {
						cout << "No" << endl;
						return 0;
					}
					pair<int, int> p1 = br.top();
					if (p1.first == r) {
						ans.emplace_back(p1.second);
						b++;
						br.pop();
					}
					else {
						if (p1.first < r) {
							cout << "No" << endl;
							return 0;
						}
						else {
							while (p1.first > r) {
								if (rr.empty()) {
									while (p1.first > r) {
										if (rb.empty()) {
											cout << "No" << endl;
											return 0;
										}
										pair<int, int> p3 = rb.top();
										if (p3.first == b) {
											ans.emplace_back(p3.second);
											r++;
											rb.pop();
										}
										else {
											cout << "No" << endl;
											return 0;
										}
									}
								}
								else {
									pair<int, int> p2 = rr.top();
									if (p2.first == r) {
										ans.emplace_back(p2.second);
										r++;
										rr.pop();
									}
									else {
										if (p2.first < r) {
											cout << "No" << endl;
											return 0;
										}
										else {
											while (p2.first > r) {
												if (rb.empty()) {
													cout << "No" << endl;
													return 0;
												}
												pair<int, int> p3 = rb.top();
												if (p3.first == b) {
													ans.emplace_back(p3.second);
													r++;
													rb.pop();
												}
												else {
													cout << "No" << endl;
													return 0;
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	while (!br.empty()) {
		pair<int, int> p1 = br.top();
		if (p1.first == r) {
			ans.emplace_back(p1.second);
			b++;
			br.pop();
		}
		else {
			if (p1.first < r) {
				cout << "No" << endl;
				return 0;
			}
			else {
				while (p1.first > r) {
					if (rr.empty()) {
						while (p1.first > r) {
							if (rb.empty()) {
								cout << "No" << endl;
								return 0;
							}
							pair<int, int> p3 = rb.top();
							if (p3.first == b) {
								ans.emplace_back(p3.second);
								r++;
								rb.pop();
							}
							else {
								cout << "No" << endl;
								return 0;
							}
						}
					}
					else {
						pair<int, int> p2 = rr.top();
						if (p2.first == r) {
							ans.emplace_back(p2.second);
							r++;
							rr.pop();
						}
						else {
							if (p2.first < r) {
								cout << "No" << endl;
								return 0;
							}
							else {
								while (p2.first > r) {
									if (rb.empty()) {
										cout << "No" << endl;
										return 0;
									}
									pair<int, int> p3 = rb.top();
									if (p3.first == b) {
										ans.emplace_back(p3.second);
										r++;
										rb.pop();
									}
									else {
										cout << "No" << endl;
										return 0;
									}
								}
							}
						}
					}
				}
			}
		}
	}
	while (!rr.empty()) {
		pair<int, int> p2 = rr.top();
		if (p2.first == r) {
			ans.emplace_back(p2.second);
			r++;
			rr.pop();
		}
		else {
			if (p2.first < r) {
				cout << "No" << endl;
				return 0;
			}
			else {
				while (p2.first > r) {
					if (rb.empty()) {
						cout << "No" << endl;
						return 0;
					}
					pair<int, int> p3 = rb.top();
					if (p3.first == b) {
						ans.emplace_back(p3.second);
						r++;
						rb.pop();
					}
					else {
						cout << "No" << endl;
						return 0;
					}
				}
			}
		}
	}
	while (!rb.empty()) {
		pair<int, int> p3 = rb.top();
		if (p3.first == b) {
			ans.emplace_back(p3.second);
			r++;
			rb.pop();
		}
		else {
			cout << "No" << endl;
			return 0;
		}
	}
	cout << "Yes" << endl;
	for (int i = 0; i < n; i++) {
		cout << ans[i];
		if (i != n - 1) {
			cout << " ";
		}
	}
	cout << endl;
}
0