Submission #13124870


Source Code Expand

#include <bits/stdc++.h>
#define ll long long
#define fastIO cout << fixed << setprecision(12), ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
using namespace std;

const int N = 1e6 + 1;
bool taken[N];

bool cmp(pair<int, int> a, pair<int, int> b) {
	if(a.second == b.second)
		return a.first > b.first;
	return a.second < b.second;
}

bool cmp2(pair<int, int> a, pair<int, int> b) {
//	if(a.first - a.second == b.first - a.second)
//		return a.second < b.second;
//	return a.first - a.second > b.first - a.second;
	if(a.second == b.second)
		return a.first > b.first;
	return a.second > b.second;
}

int main() {
	fastIO;
#ifdef LOCAL
	freopen("input.in", "rt", stdin);
#endif
	int n;
	cin >> n;
	string str;
	int open = 0, closed = 0;
	vector<pair<int, int>> vec;
	for (int i = 0; i < n; ++i) {
		cin >> str;
		int cnt = 0, minus = 0;
		for (int i = 0; i < (int)str.size(); ++i) {
			if(str[i] == '(')
				++cnt;
			else
				--cnt;
			if(cnt < 0)
				++minus, cnt = 0;
		}
		if(minus) {
			if(cnt)
				vec.push_back({cnt, minus});
			else
				closed += abs(minus);
		} else {
			open += cnt;
		}
	}
	int total = open;
	sort(vec.begin(), vec.end(), cmp);
	for (int i = 0; i < (int)vec.size(); ++i) {
		if(vec[i].second > vec[i].first) continue;
		if(total >= vec[i].second) {
			total -= vec[i].second;
			total += vec[i].first;
			taken[i] = 1;
		}
	}
	vector<pair<int, int>> vv;
	for (int i = 0; i < (int)vec.size(); ++i) {
		if(taken[i]) continue;
		vv.push_back(vec[i]);
	}
	sort(vv.begin(), vv.end(), cmp2);
	for (int i = 0; i < (int)vv.size(); ++i) {
		total -= vv[i].second;
		if(total < 0) {
			cout << "No";
			return 0;
		}
		total += vv[i].first;
	}
	total -= closed;
	if(total == 0)
		cout << "Yes";
	else
		cout << "No";
	return 0;
}

Submission Info

Submission Time
Task F - Bracket Sequencing
User it_wasnt_me
Language C++ (GCC 9.2.1)
Score 600
Code Size 1851 Byte
Status AC
Exec Time 52 ms
Memory 7700 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 4
AC × 32
Set Name Test Cases
Sample sample_01, sample_02, sample_03, sample_04
All random_01, random_02, random_03, random_04, random_05, random_06, random_07, random_08, random_09, random_10, random_11, random_12, random_13, random_21, random_22, random_23, random_31, random_32, random_33, random_41, random_42, random_43, random_51, random_52, random_53, random_61, random_62, random_63, sample_01, sample_02, sample_03, sample_04
Case Name Status Exec Time Memory
random_01 AC 33 ms 4160 KiB
random_02 AC 49 ms 3760 KiB
random_03 AC 41 ms 4020 KiB
random_04 AC 52 ms 3484 KiB
random_05 AC 51 ms 3616 KiB
random_06 AC 29 ms 3596 KiB
random_07 AC 13 ms 3620 KiB
random_08 AC 18 ms 3572 KiB
random_09 AC 11 ms 3632 KiB
random_10 AC 30 ms 3496 KiB
random_11 AC 2 ms 3620 KiB
random_12 AC 3 ms 3504 KiB
random_13 AC 2 ms 3572 KiB
random_21 AC 2 ms 3620 KiB
random_22 AC 2 ms 3620 KiB
random_23 AC 2 ms 3552 KiB
random_31 AC 2 ms 3568 KiB
random_32 AC 2 ms 3496 KiB
random_33 AC 2 ms 3568 KiB
random_41 AC 2 ms 3568 KiB
random_42 AC 2 ms 3496 KiB
random_43 AC 2 ms 3604 KiB
random_51 AC 2 ms 3484 KiB
random_52 AC 2 ms 3492 KiB
random_53 AC 2 ms 3572 KiB
random_61 AC 34 ms 5320 KiB
random_62 AC 40 ms 7316 KiB
random_63 AC 50 ms 7700 KiB
sample_01 AC 2 ms 3560 KiB
sample_02 AC 2 ms 3652 KiB
sample_03 AC 2 ms 3612 KiB
sample_04 AC 2 ms 3536 KiB