Submission #365508

#TimeUsernameProblemLanguageResultExecution timeMemory
365508kostia244parentrises (BOI18_parentrises)C++17
50 / 100
148 ms65084 KiB
#pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx,avx2,sse,sse2") #include<bits/stdc++.h> #define all(x) begin(x), end(x) using namespace std; using ll = long long; vector<vector<int>> g; string solve(string s) { g.assign(s.size(), {}); vector<int> z[2]; auto check = [&](string s) { int ok = 1, a = 0, b = 0, c = count(all(s), '('), d = count(all(s), ')'); for(auto i : s) { ok &= b <= 2*a; ok &= c <= 2*d; if(i == ')') swap(a, b), swap(c, d); a++, c--; if(i == ')') swap(a, b), swap(c, d); ok &= b <= 2*a; ok &= c <= 2*d; } return ok; }; if(!check(s)) return "impossible"; for(auto &i : s) { int pos = &i-&s[0]; if(i == '(') { z[0].push_back(pos); } else { if(z[0].empty()) { if(z[1].empty()) return "wimpossible"; g[pos].push_back(z[1].back()); g[z[1].back()].push_back(pos); z[1].pop_back(); } else { g[pos].push_back(z[0].back()); g[z[0].back()].push_back(pos); z[1].push_back(z[0].back()); z[0].pop_back(); } }/* cout << pos << ": "; for(auto i : z[0]) cout << i << " "; cout << " | "; for(auto i : z[1]) cout << i << " "; cout << endl;*/ } reverse(all(s)); z[0].clear(); for(auto &i : s) { int pos = &i-&s[0]; pos = s.size()-1-pos; if(i == ')') { if(g[pos].size() < 2) z[0].push_back(pos); } else if(g[pos].empty()) { if(z[0].empty()) return "wimpossible"; g[pos].push_back(z[0].back()); g[z[0].back()].push_back(pos); z[0].pop_back(); } } reverse(all(s)); vector<int> col(s.size()); for(int i = 0; i < s.size(); i++) { if(g[i].size() == 2) { int c = 1; for(auto v : g[i]) col[v] = c++; } } s = ""; for(auto i : col) { if(i == 0) s += "G"; if(i == 1) s += "B"; if(i == 2) s += "R"; } return s; } int main() { cin.tie(0)->sync_with_stdio(0); int t, x; string s; cin >> t; if(t == 1) { cin >> t; while(t--) { cin >> s; cout << solve(s) << '\n'; } } else { //calc(); cin >> t; //while(t--) cin >> x, cout << dp[x][0][0] << endl; } }

Compilation message (stderr)

parentrises.cpp: In function 'std::string solve(std::string)':
parentrises.cpp:62:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |  for(int i = 0; i < s.size(); i++) {
      |                 ~~^~~~~~~~~~
parentrises.cpp: In function 'int main()':
parentrises.cpp:78:9: warning: unused variable 'x' [-Wunused-variable]
   78 |  int t, x;
      |         ^
#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...