Submission #494305

#TimeUsernameProblemLanguageResultExecution timeMemory
494305SirCovidThe19thparentrises (BOI18_parentrises)C++17
0 / 100
1 ms204 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i, x, y) for (int i = x; i < y; i++) #define add(a, b) a = (a + b) % md const int md = 1e9 + 7; void solve1(){ int n; string A; cin >> A; n = A.size(); int sm = 0, R[n], G[n], B[n], maxRem[n], maxAdd[n]; FOR(i, 0, n) R[i] = 1, G[i] = B[i] = 0, maxRem[i] = 1e9, maxAdd[i] = 1e9; queue<int> close; FOR(i, 0, n){ sm += (A[i] == '(' ? 1 : -1); if (A[i] == ')'){ //greedily remove ) from frnot close.push(i); if (sm < 0){ int pos = close.front(); close.pop(); R[pos] = 0; B[pos] = 1; sm = 0; } maxRem[i] = sm; } } for (int i = n - 2; ~i; i--) maxRem[i] = min(maxRem[i], maxRem[i + 1]); if (sm > 0){ //greedily remove ( from front int curRem = 0; FOR(i, 0, n) if (A[i] == '(' and curRem < maxRem[i]) R[i] = 0, B[i] = 1, curRem++; if (curRem != sm){ cout<<"Impossible"<<endl; return; } } sm = 0; queue<int> open; FOR(i, 0, n){ if (R[i]){ if (A[i] == '(') open.push(i); continue; } sm += (A[i] == '(' ? 1 : -1); if (sm < 0){ //greedily add ( if (open.empty()){ cout<<"Impossible"<<endl; return; } int pos = open.front(); open.pop(); R[pos] = 0; G[pos] = 1; sm = 0; } if (A[i] == ')') maxAdd[i] = i; } for (int i = n - 2; ~i; i--) maxAdd[i] = min(maxAdd[i], maxAdd[i + 1]); if (sm > 0){ //greedily add ) to end int curAdd = 0; for (int i = n - 1; ~i; i--) if (A[i] == ')' and R[i] and curAdd < maxAdd[i] and curAdd < sm) R[i] = 0, G[i] = 1, curAdd++; if (curAdd != sm){ cout<<"Impossible"<<endl; } } FOR(i, 0, n) cout<<(R[i] ? 'R' : G[i] ? 'G' : 'B'); cout<<endl; } void solve2(){ } int main(){ int type, tc; cin >> type >> tc; while (tc--) type == 1 ? solve1() : solve2(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...